当前位置:   article > 正文

pom.xml详解撸一下基础_pom.xml文件怎么配置

pom.xml文件怎么配置

pom.xml解释

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--project 标签:根标签,表示对当前工程进行配置、管理-->
  3. <project xmlns="http://maven.apache.org/POM/4.0.0"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <!--modelVersion 标签:从Maven2开始就固定是4.0.0-->
  7. <!--代表当前pom.xml所采用的标签结构-->
  8. <modelVersion>4.0.0</modelVersion>
  9. <!--坐标信息-->
  10. <!--在本地仓库中安装后对应的路径:com\seer\maven\seer-heathy-demo\1.0-SNAPSHOT\seer-heathy-demo-1.0-SNAPSHOT.jar-->
  11. <!--groupId 标签:坐标向量之一;代表公司或组织开发的某一个项目-->
  12. <groupId>com.seer.maven</groupId>
  13. <!--artifactId 标签:坐标向量之一;代表项目下的某一个模块-->
  14. <artifactId>seer-heathy-demo</artifactId>
  15. <!--version 标签:坐标向量之一;代表当前模块的版本-->
  16. <version>1.0-SNAPSHOT</version>
  17. <!--packaging 标签:打包方式-->
  18. <!--取值jar:生成jar包,说明这是一个Java工程-->
  19. <!--取值war:生成war包,说明这是一个Web工程-->
  20. <!--取值pom:说明这个工程是用来管理其他工程的工程-->
  21. <packaging>jar</packaging>
  22. <name>seer-heathy-demo</name>
  23. <url>http://maven.apache.org</url>
  24. <!--在Maven中定义属性值-->
  25. <properties>
  26. <!--在构建过程中读取源码时使用的字符集-->
  27. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  28. </properties>
  29. <!--dependencies标签:配置具体依赖信息,可以包含多个dependency子标签-->
  30. <dependencies>
  31. <!--dependency 标签:配置一个具体的依赖信息-->
  32. <dependency>
  33. <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
  34. <groupId>junit</groupId>
  35. <artifactId>junit</artifactId>
  36. <version>4.12</version>
  37. <!--scope标签:配置当前依赖的范围-->
  38. <scope>test</scope>
  39. </dependency>
  40. </dependencies>
  41. </project>

创建java版的maven工程

1、Maven中的坐标
groupId:公司或组织的id
artifactId:一个项目或者是项目中的一个模块的id
version:版本号

groudid:公司或组织域名的倒序,通常也会加上项目名称
列如:com.seer.maven
artifactid:模块的名称,将来作为Maven工程的工程名
version:模块的版本号,根据自己的需要的设定
列如:SNAPSHOT表示快照版本,正在迭代过程中,不稳定版本
列如:RELEASE表示正式版本

坐标和仓库中的jar包的存储路径之间的对应关系
坐标:

  1. <groupId>javax.servlet</groupId>
  2. <artifactId>servlet-api</artifactId>
  3. <version>2.5<version>


上面坐标对应jar在Maven本地仓库中的位置:

Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

使用maven命令生成Maven工程
运行 mvn archetype:generate 命令

POM:projectObjectModel,项目对象模型。和POM类似的是:DOM(Doucument Object Model),文档对象模型。他们都是模型化思想的具体实现。

开发领域的技术发展趋势就是:约定大于配置,配置大于编码

Maven执行构建命令
1、mvn -v命令和构建操作无关,只要正确配置了PATH,在任何目录下都可以执行。
2、清理操作
mvn clean
效果:删除target目录
3、编译操作
主程序编译:mvn compile
测试程序编译:mvn test-compile
主体程序编译结果存放的目录:target/classes
测试程序编译结果存放的目录:target/test-classes
4、测试操作
mvn test
测试报告存放的目录:target/surefire-reports
5、打包操作
mvn package
打包结果--jar包,存放的目录:target
6、安装操作
mvn install
安装的效果是将本地构建过程中生成的jar包存入Maven本地仓库。这个jar包在Maven仓库中的路径是根据它的坐标生成的。

坐标:

  1. <groupId>javax.servlet</groupId>
  2. <artifactId>servlet-api</artifactId>
  3. <version>2.5<version>


上面坐标对应jar在Maven本地仓库中的位置:

Maven本地仓库根目录D:\maven-repo\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

另外,安装操作还会降pom.xml文件转换为XXX.pom文件一起存入本地仓库。所以我们在maven的本地仓库想看一个jar包原始的pom.xml文件时,查看对应的XXX.pom文件即可,他们是名字发生改变,本质上是同一个文件。

创建web版的maven工程
参数archetpeGroupId、archetypeArtifactId、archetypeVersion用来指定现在使用的maven-archetype-webapp的坐标
在一个工作空间根目录来操作,不能在一个非pom的工程下在创建其他工程。
 

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

测试依赖范围
标签的位置:dependencies/dependency/scope
标签的可选值:compile/test/provided/system/runtime/import

compile:解释
provided:已提供

  1. <!--dependency 标签:配置一个具体的依赖信息-->
  2. <dependency>
  3. <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
  4. <groupId>junit</groupId>
  5. <artifactId>junit</artifactId>
  6. <version>4.12</version>
  7. <!--scope标签:配置当前依赖的范围-->
  8. <scope>test</scope>
  9. </dependency>
  10. <dependency>
  11. <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
  12. <groupId>junit</groupId>
  13. <artifactId>junit</artifactId>
  14. <version>4.12</version>
  15. <!--scope标签:配置当前依赖的范围-->
  16. <!--表示会被大金war包-->
  17. <scope>compile</scope>
  18. </dependency>
  19. <dependency>
  20. <!--坐标信息:导入那个jar包,就配置它的坐标信息即可-->
  21. <groupId>junit</groupId>
  22. <artifactId>junit</artifactId>
  23. <version>4.12</version>
  24. <!--scope标签:配置当前依赖的范围-->
  25. <!--表示已提供的,war包里面不会被打包进去-->
  26. <scope>provided</scope>
  27. </dependency>

 结论:

compile:通常使用的第三方的框架jar包这样在项目实际运行时真正要用到的jar包都是以compile范围进行依赖,比如SSM框架所需要的jar包
test:测试过程中使用的jar包,以test范围依赖过来,比如junit。
provided:在开发过程中需要用到的“服务器上的jar包”通常provided范围依赖进来。比如servlet-api、jsp-api。而这些范围的jar包之所以不参与部署、不放进war包,就是避免和服务器上已有的同类jar包产生冲突,同时减轻服务器的负担。说白了就是“服务器上已经有了,你就别带了”

排除依赖:设置方式

  1. <dependency>
  2. <groupId>com.atguigu.maven</groupId>
  3. <artifactId>pro01-maven-java</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. <scope>compile</scope>
  6. <!--使用excludes标签配置依赖的排除-->
  7. <exclusions>
  8. <!--在exclude标签中配置一个具体的排除-->
  9. <exclusion>
  10. <!--指定要排除的依赖坐标(不需要写version)-->
  11. <groupId>commons-logging</groupId>
  12. <artifactId>commons-logging</artifactId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>

在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素: 

type:对应于依赖项目的packaging类型,默认是jar

scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):

compile:这是它的默认值,这种类型很容易让人产生误解,以为只有在编译的时候才是需要的,其实这种类型表示所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。

provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。

 runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。

test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。

system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。

systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,否则Maven将报错。

optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。

exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。

属性:

在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:

 env.propertyName:这种形式表示引用的是环境变量,比如我们需要引用当前系统的环境变量PATH的时候,就可以使用${env.PATH}。

project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。比如我们需要引用当前project下面的version的时候,就可以使用${project.version}。

settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。比如我们需要引用settings下的本地仓库localRepository元素的值时,我们可以用${settings.localRepository}

 java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。

pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/309247
推荐阅读