pom文件
1.1 pom文件简介
无
1.2 pom文件组成部分
1.2.1modelVersion
1.2.2 maven坐标
1.2.3 maven依赖
1.2.4聚合Aggregation (orMulti-Module)
聚合是在pom.xml文件中使用
<modules><module>模块名称(不是artifactId值)</module></modules>
来整合多个子项目(模块),聚合的项目的<packaging>元素值必须为“pom”,如下示例:
<groupId>com.xtu.oms.bussiness</groupId> <artifactId>oms-bussiness</artifactId> <version>0.0.2</version> <packaging>pom</packaging>
<modules> <!-- 被聚合的模块列表 --> <module>oms-inventory</module> <module>oms-orderManager</module> </modules> |
聚合可使得含有多个模块的项目在构建的时候只需要针对聚合的那一个项目进行构建,即只需要一次命令便可以构建所有的模块,maven会根据模块列表的依赖关系自动进行构建排序,这样便不需要分别按照各个模块的依赖关系分别进行构建。
注意:聚合与继承没有关系。
1.2.5属性(Properties)配置
maven pom文件支持通过表达式“${}”来获取属性值,比如我们希望整个项目采用统一的编码UTF-8进行构建,又比如我们需要引入一些jar包,它们的版本号都相同,那么我们可以采取统一配置属性,然后使用表达式动态获取属性值。
maven官方介绍了5种方式配置属性和使用属性(笔者在这里不多说,有兴趣的读者可参考附录参考资料[1]中的信息),笔者项目中所用的是在pom.xml文件中的<properties>元素中定义属性名和属性值,然后在pom.xml文件中使用表达式“${属性名}”来获取属性值,如下面的例子:
<groupId>com.xtu.oms </groupId> <artifactId>oms-web</artifactId> <version>0.0.1</version> <packaging>war</packaging> <name>oms-web Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF- 8</project.build.sourceEncoding> <jackson.version>2.5.3</jackson.version> <spring.version>4.1.9.RELEASE</spring.version> <validator.version>5.1.3.Final</validator.version> </properties> <dependencies> <!-- bean validate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <!-- 属性值的引用 --> <version>${validator.version}</version> </dependency> </dependencies> |
注意:<project.build.sourceEncoding>元素是maven的固有元素,maven会自动获取其值,但是<properties>的其它子元素名称都是由开发人员自己定义的,maven并不知道,因此需要手动使用“${}”来获取。
1.3父pom(parent pom)(pom继承)
定义一个pom文件,指定其<packaging>元素值为“pom”,那么该pom文件便可以被其它pom文件继承。继承时只需要在子pom文件中使用<parent>元素指定父pom的位置即可。如下示例:
父pom文件片段:
<modelVersion>4.0.0</modelVersion> <groupId>com.xtu.oms</groupId> <artifactId>oms-parent</artifactId> <version>0.0.2</version> <packaging>pom</packaging> |
子pom文件片段:
<modelVersion>4.0.0</modelVersion> <parent> <groupId>com.xtu.oms</groupId> <artifactId>oms-parent</artifactId> <version>0.0.2</version> </parent> <groupId>com.xtu.oms.oms-inf</groupId> <artifactId>oms-oms-inf</artifactId> <version>0.0.2</version> <packaging>jar</packaging> |
子pom文件可以继承父pom的以下内容:
暂无
1.4超级pom(super pom)
像Java中的所有类都有一个默认的共同父类java.lang.Object一样,maven中的所有pom文件都有一个默认的父pom,其位置在maven根目录下的lib\maven-model-builder-3.3.9.jar中,路径为org\apache\maven\model\pom-4.0.0.xml,pom-4.0.0.xml就是超级pom。
超级pom中定义了。。。
1.5有效pom(effective pom)
有效pom是自定义pom文件、自定义父pom文件和超级pom文件整合之后的pom文件,在eclipse中可以通过EffectivePOM视图进行查看。
1.6 pom文件元素解释
<!-- modelVersion是pom.xml文件中的必须元素,其值4.0.0表示同时支持maven2&3-->
<modelVersion>4.0.0</modelVersion>
<!-- maven坐标是一个三元组(groupId,artifactId,version,packaging,classifier) -->
<!-- mvn install命令最后将项目生成的包发送至本地仓库中,包在本地仓库的存放是以maven坐标为指导的 -->
<!-- 添加项目依赖时,依据maven坐标可唯一定位一个jar包 -->
<!-- groupId代表了同一个项目,不同项目groupId值要不一样(并不是强制要不一样,只要maven坐标唯一,groupId值是可以相同的,
只是为了见名知意[groupId值相同说明是同一个项目],因此最好不同项目保证groupId值不同。),要是同一个项目有好多子项目构成,那么
这些子项目应该使用相同的groupId值,以便见值便知是同一个大项目
-->
<groupId>com.xtu.swagger.maven</groupId>
<!-- artifactId是项目名称 -->
<artifactId>swagger-springMVC-test-Maven</artifactId>
<!-- version代表一个项目的版本,比如同一个项目后期升级后版本号便需要升级-->
<version>0.0.1</version>
<!-- packaging元素表示需要将本项目达成的包的类型:jar表示生成jar包,war表示生成war包。packaging的默认值是jar -->
<packaging>war</packaging>
<name>swagger-springMVC-test-Maven Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- maven依赖配置 -->
<!-- 1. 在配置了依赖关系后,maven会自动从仓库中寻找依赖的jar包,它首先从在settings.xml中配置的本地仓库中去寻找,
找不到时便会从远程仓库中去寻找和下载,若还是找不到,那么便会执行失败。请注意:maven只会找寻jar包,并不会生成不存在
的jar包。
2. maven的依赖是一种传递性依赖,比如你的项目中依赖了spring-expression包,但是spring-expression项目自身又
依赖了其它包,那么maven会自动下载所有依赖的包,这保证了在自己的项目中只需要显示写出直接依赖的jar包即可。
-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.0.1.RELEASE</version>
<!-- type的默认值是jar-->
<!--
<type>jar</type>
-->
<!--
1. scope元素的默认值是compile,可选值有[compile,provided,runtime,test,system]
2. 最常用的是compile和test
1) compile:在编译阶段就将jar包引入项目(即添加进项目的classpath中),此后在测试阶段、正常运行阶段都会生效。
2) test:只在测试阶段会被引入项目的classpath中,即只在测试阶段生效,比如JUnit
3) provided:编译阶段、测试阶段生效,但是运行阶段不生效(用于运行阶段由web容器提供惑JDK提供)
-->
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-embedder</artifactId>
<version>2.0</version>
<exclusions>
<!--
1. exclusion中文意思是'排除',表示不引入指定的项目。
2. exclusion位于exclusions元素内部,可以有多个。
3. 如下的这段表示引入maven-embedder时不引入其依赖的maven-core包以及maven-core自身依赖的其它包
-->
<exclusion>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.1.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<!-- repository可以有多个 -->
<repository>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>nexus</id>
<name>local private nexus</name>
<url>http://***</url>
</repository>
</repositories>
附录
参考资料:
[1]. http://maven.apache.org/pom.html