正常的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.</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.</struts.version>
<mysql.version>5.1.</mysql.version>
<hibernate.version>4.3..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 | 依赖项的适用范围:
之前例子里的junit就只用在了test中。 |
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.</modelVersion>
<parent>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream-parent</artifactId>
<version>1.4.</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>