Maven里头的pom.xml配置详解
正常的pom配置文件如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <!-- maven model version --> <modelVersion>4.0.0</modelVersion> <!-- project group id & artifact id --> <groupId>com.freesoft.mvn-webapp</groupId> <artifactId>mvnwebapp</artifactId> <!-- packing type --> <packaging>war</packaging> <!-- version --> <version>1.0-SNAPSHOT</version> <name>mvnwebapp Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- JUnit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>mvnwebapp</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <tomcat-url>http://localhost:8080/manager/html</tomcat-url> <server>tomcat_localtest</server> </configuration> </plugin> </plugins> </pluginManagement> </build> <properties> <struts.version>2.3.15</struts.version> <mysql.version>5.1.29</mysql.version> <hibernate.version>4.3.1.Final</hibernate.version> </properties> </project>
1. 基本信息
modelVersion | Maven模块版本,目前我们一般都取值4.0.0 |
groupId | 整个系统的名称。 |
artifactId | 子模块名称。 |
packaging | 打包类型,可取值:jar,war等等,这个配置用于package的phase,具体可以参见package运行的时候启动的plugin,后面有机会我们会讲述如何配置打包的插件。 |
2.依赖
依赖关系。实际上pom之间存在好三种关系:继承、依赖、聚合。我们先讲依赖,这也是最重要的关系。
groupId | 依赖项的groupId |
artifactId | 依赖项的artifactId |
version | 依赖项的版本 |
scope | 依赖项的适用范围:
|
exclusions | 排除项目中的依赖冲突时使用。 |
2.1 关于排除依赖冲突
我们可能经常会遇到这样一个问题:我们的项目有两个依赖项:A & B,而且A和B同时依赖了C,但不是同一个版本。那么我们怎么办呢?
2.1.1 添加检查插件
<reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> </plugin> </plugins> </reporting>
然后运行:mvn project-info-reports:dependencies,来查看依赖项报告。
2.1.2 去除依赖项
如果我们需要在某个dependency中去除某个依赖项,直接这样即可:
<!-- Struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> <exclusions> <exclusion> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </exclusion> </exclusions> </dependency>
3. 继承
我的repository下面有个例子就直接拿来用了:
<modelVersion>4.0.0</modelVersion> <parent> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream-parent</artifactId> <version>1.4.3</version> </parent> <artifactId>xstream</artifactId> <packaging>jar</packaging> <name>XStream Core</name>
其中的parent表示父pom是com.thoughtworks.xstream的xstream-parent的1.4.3版本。继承关系比较简单,这里不做过多介绍。
4. 聚合
我们可以通过一个大的项目来整合各个小的模块:
<modules>
<module>my-app</module> </modules>
5. 属性
属性表述类似于EL表达式,ANT中也同样有,所以我们的properties字段可以这样使用:
<!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency>
6. 构建
6.1 plugin
Plugin的配置如下:
<pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <tomcat-url>http://localhost:8080/manager/html</tomcat-url> <server>tomcat_localtest</server> </configuration> </plugin> </plugins> </pluginManagement>
我们可以看到同样要哟偶groupId、artifactId、version还有一些配置参数。
6.2 resource
指定你在Build时需要的资源文件:
<resources> <resource> <targetPath>WEB-INF/resource</targetPath> <!-- 不对文件中的表达式进行处理 --> <filtering>false</filtering> <directory>${basedir}/src/test/resources</directory> <includes> <include>include.xml</include> </includes> <excludes> <exclude>exclude.xml</exclude> </excludes> </resource> </resources>