Maven项目管理实战(四)-pom.xml文件详解

我们先看一个简单的例子:


<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. 基本信息

modelVersionMaven模块版本,目前我们一般都取值4.0.0
groupId整个系统的名称。
artifactId子模块名称。
packaging打包类型,可取值:jar,war等等,这个配置用于package的phase,具体可以参见package运行的时候启动的plugin,后面有机会我们会讲述如何配置打包的插件。

2. dependencies

依赖关系。实际上pom之间存在好三种关系:继承、依赖、聚合。我们先讲依赖,这也是最重要的关系。

groupId依赖项的groupId
artifactId依赖项的artifactId
version依赖项的版本
scope依赖项的适用范围:
  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
之前例子里的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.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>


ok,基本上就是这么多,后续有什么疑问也请大家留言。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值