Maven之pom.xml配置文件详解
一、什么是pom?
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
二、概览
下面是一个POM项目中的pom.xml文件中包含的元素。注意,其中的modelVersion是4.0.0,这是当前仅有的可以被Maven2&3同时支持的POM版本,它是必须的。
4.0.0
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
三、maven POM.xml详解
1、基本配置
----------------------------------------------------------------------------------------------------------------------------------------------
modelVersion Maven模块版本,目前我们一般都取值4.0.0
----------------------------------------------------------------------------------------------------------------------------------------------
groupId 整个系统的名称。
----------------------------------------------------------------------------------------------------------------------------------------------
artifactId 子模块名称。
----------------------------------------------------------------------------------------------------------------------------------------------
packaging 打包类型,可取值:jar,war等等,这个配置用于package的phase,具体可以参见package运行的时候启动的plugin,后面有机会我们会讲述如何配置打包的插件。
----------------------------------------------------------------------------------------------------------------------------------------------
2、dependencies
依赖关系。实际上pom之间存在好三种关系:继承、依赖、聚合。我们先讲依赖,这也是最重要的关系。
---------------------------------------------------------------------------------------------
groupId 依赖项的groupId
---------------------------------------------------------------------------------------------
artifactId 依赖项的artifactId
---------------------------------------------------------------------------------------------
version 依赖项的版本
---------------------------------------------------------------------------------------------
依赖项的适用范围:
compile,缺省值,适用于所有阶段,会随着项目一起发布。
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
scope runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
之前例子里的junit就只用在了test中。
---------------------------------------------------------------------------------------------
exclusions 排除项目中的依赖冲突时使用。
---------------------------------------------------------------------------------------------
2.1、我们可能经常会遇到这样一个问题:我们的项目有两个依赖项:A & B,而且A和B同时依赖了C,但不是同一个版本。那么我们怎么办呢?
2.1.1、添加检查插件
org.apache.maven.plugins
maven-project-info-reports-plugin
然后运行:mvn project-info-reports:dependencies,来查看依赖项报告。
2.1.2、去除依赖项
如果我们需要在某个dependency中去除某个依赖项,直接这样即可:
org.apache.struts
struts2-core
${struts.version}
org.freemarker
freemarker
3、继承
我的repository下面有个例子就直接拿来用了:
4.0.0
com.thoughtworks.xstream
xstream-parent
1.4.3
xstream
jar
XStream Core
其中的parent表示父pom是com.thoughtworks.xstream的xstream-parent的1.4.3版本。继承关系比较简单,这里不做过多介绍。
4、聚合
我们可以通过一个大的项目来整合各个小的模块:
my-app
5、属性
属性表述类似于EL表达式,ANT中也同样有,所以我们的properties字段可以这样使用:
mysql
mysql-connector-java
${mysql.version}
6、构建
6.1 plugin
Plugin的配置如下:
org.apache.tomcat.maven
tomcat7-maven-plugin
2.1
http://localhost:8080/manager/html
tomcat_localtest
我们可以看到同样要哟偶groupId、artifactId、version还有一些配置参数。
6.2 resource
指定你在Build时需要的资源文件:
WEB-INF/resource
false
${basedir}/src/test/resources
include.xml
exclude.xml
宝宝们有啥问题可以联系我呦!!!