1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3 <!-- maven model version -->
4 <modelVersion>4.0.0</modelVersion>
5 <!-- project group id & artifact id -->
6 <groupId>com.freesoft.mvn-webapp</groupId>
7 <artifactId>mvnwebapp</artifactId>
8 <!-- packing type -->
9 <packaging>war</packaging>
10 <!-- version -->
11 <version>1.0-SNAPSHOT</version>
12 <name>mvnwebapp Maven Webapp</name>
13 <url>http://maven.apache.org</url>
14
15
16 <dependencies>
17
18 <!-- JUnit -->
19 <dependency>
20 <groupId>junit</groupId>
21 <artifactId>junit</artifactId>
22 <version>4.11</version>
23 <scope>test</scope>
24 </dependency>
25
26 </dependencies>
27
28
29 <build>
30 <finalName>mvnwebapp</finalName>
31 <pluginManagement>
32 <plugins>
33 <plugin>
34 <groupId>org.apache.tomcat.maven</groupId>
35 <artifactId>tomcat7-maven-plugin</artifactId>
36 <version>2.1</version>
37 <configuration>
38 <tomcat-url>http://localhost:8080/manager/html</tomcat-url>
39 <server>tomcat_localtest</server>
40 </configuration>
41 </plugin>
42 </plugins>
43 </pluginManagement>
44 </build>
45
46 <properties>
47 <struts.version>2.3.15</struts.version>
48 <mysql.version>5.1.29</mysql.version>
49 <hibernate.version>4.3.1.Final</hibernate.version>
50 </properties>
51 </project>

下面分段讲解。

1. 基本信息

modelVersion Maven模块版本,目前我们一般都取值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 添加检查插件

1 <reporting>
2 <plugins>
3 <plugin>
4 <groupId>org.apache.maven.plugins</groupId>
5 <artifactId>maven-project-info-reports-plugin</artifactId>
6 </plugin>
7 </plugins>
8 </reporting>

然后运行:mvn project-info-reports:dependencies,来查看依赖项报告。

2.1.2 去除依赖项

如果我们需要在某个dependency中去除某个依赖项,直接这样即可:

 1 <!-- Struts2 -->
2 <dependency>
3 <groupId>org.apache.struts</groupId>
4 <artifactId>struts2-core</artifactId>
5 <version>${struts.version}</version>
6 <exclusions>
7 <exclusion>
8 <groupId>org.freemarker</groupId>
9 <artifactId>freemarker</artifactId>
10 </exclusion>
11 </exclusions>
12 </dependency>

3. 继承

我的repository下面有个例子就直接拿来用了:

1 <modelVersion>4.0.0</modelVersion>
2 <parent>
3 <groupId>com.thoughtworks.xstream</groupId>
4 <artifactId>xstream-parent</artifactId>
5 <version>1.4.3</version>
6 </parent>
7 <artifactId>xstream</artifactId>
8 <packaging>jar</packaging>
9 <name>XStream Core</name>

其中的parent表示父pom是com.thoughtworks.xstream的xstream-parent的1.4.3版本。继承关系比较简单,这里不做过多介绍。

4. 聚合

我们可以通过一个大的项目来整合各个小的模块:

1 <modules>
2 <module>my-app</module>
3 </modules>

5. 属性

属性表述类似于EL表达式,ANT中也同样有,所以我们的properties字段可以这样使用:

1 <!-- mysql -->
2 <dependency>
3 <groupId>mysql</groupId>
4 <artifactId>mysql-connector-java</artifactId>
5 <version>${mysql.version}</version>
6 </dependency>

6. 构建

6.1 plugin

Plugin的配置如下:

 1 <pluginManagement>
2 <plugins>
3 <plugin>
4 <groupId>org.apache.tomcat.maven</groupId>
5 <artifactId>tomcat7-maven-plugin</artifactId>
6 <version>2.1</version>
7 <configuration>
8 <tomcat-url>http://localhost:8080/manager/html</tomcat-url>
9 <server>tomcat_localtest</server>
10 </configuration>
11 </plugin>
12 </plugins>
13 </pluginManagement>

我们可以看到同样要哟偶groupId、artifactId、version还有一些配置参数。

6.2 resource

指定你在Build时需要的资源文件:

 1 <resources>
2 <resource>
3 <targetPath>WEB-INF/resource</targetPath>
4 <!-- 不对文件中的表达式进行处理 -->
5 <filtering>false</filtering>
6 <directory>${basedir}/src/test/resources</directory>
7 <includes>
8 <include>include.xml</include>
9 </includes>
10 <excludes>
11 <exclude>exclude.xml</exclude>
12 </excludes>
13 </resource>
14 </resources>

maven pom.xml配置文件详解的更多相关文章

  1. Maven pom.xml文件详解

    Maven pom.xml文件详解 一.简介 POM全称是Project Object Model,即项目对象模型. pom.xml是maven的项目描述文件,它类似与antx的project.xml ...

  2. Maven的pom.xml配置文件详解

    Maven简述 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Mav ...

  3. (转)Maven pom.xml 配置详解

    背景:maven一直感觉既熟悉又陌生,归根结底还是自己不太熟. 1 什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者 ...

  4. Maven(四-2) Maven pom.xml 配置详解

    转载于:http://niuzhenxin.iteye.com/blog/2042102 什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述 ...

  5. Maven之(七)pom.xml配置文件详解

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和li ...

  6. Maven之pom.xml配置文件详解

    此文非原创,摘自:https://www.baidu.com/link?url=GlGgW21nijIiULDZj0RfPH8ofqGMqEnAzXiym7O3hfrZM5nFH2enukemBNTX ...

  7. [转]Maven之(七)pom.xml配置文件详解

    原文地址:https://blog.csdn.net/u012152619/article/details/51485297 setting.xml主要用于配置maven的运行环境等一系列通用的属性, ...

  8. Maven中的pom.xml配置文件详解

    原文:http://blog.csdn.net/u012152619/article/details/51485297 <project xmlns="http://maven.apa ...

  9. 7.Maven之(七)pom.xml配置文件详解

    转自:https://blog.csdn.net/qq_33363618/article/details/79438044 setting.xml主要用于配置maven的运行环境等一系列通用的属性,是 ...

随机推荐

  1. topcoder srm 560 div1

    problem1 link 从大到小贪心,较大的数字应该放置在较浅的位置. problem2 link 最后的位置要么都是整数(经过偶数次变换),要么是$(p.5, q.5)$这种位置(奇数次变换). ...

  2. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  3. 4、zabbix基本配置入门

    Zabbix监控流程: Host group --> Hosts(向server端添加被监控主机) --> Application(在agent定义) --> Items(在appl ...

  4. Java 设计模式学习笔记1——策略模式(Duck例子)

    0.假设现有工程(Duck)中遇到为类添加功能的问题,如何设计类添加新的功能? 1.利用继承提供的Duck(鸭子)的行为会导致哪些缺点? (1)代码在多个子类中重复 (2)很多男知道所有鸭子的全部行为 ...

  5. freecodecamp数字转化成罗马数字

    做数字转罗马数字时,用到了贪心算法,很好用,记录一下,有时间系统的学一下 罗马数字的规则: 罗马数字网址 1 5 10 50 100 500 1000 I V X L C D M1 1当一个符号在一个 ...

  6. C语言获取Linux系统精确时间

    gettimeofday()函数的使用方法 1.函数原型 #include <sys/time.h> int gettimeofday(struct timeval *tv, struct ...

  7. 20190318wdVBA_替换下划线

    Sub 替换下划线() Selection.HomeKey wdStory Selection.Find.ClearFormatting Selection.Find.Font.Underline = ...

  8. hdu-1430 魔板 康拓展开+映射优化

    给定三种操作,将排列A转化为排列B,求最少步骤. 这种题目可以只跑一次bfs,比如只跑"12345678",那么如果遇到"23456781"->某个字符串 ...

  9. 【JS】【5】request.getHeader("referer")的作用

    正文: request.getHeader("referer"):获取来访者地址 注意:只有通过链接访问当前页的时候,才能获取上一页的地址,以下情况是获取不到值的: 只有通过链接访 ...

  10. mysql数据库的基础操作

    注 : 本文中注释因为方便写了# ,mysql中规范应为 -- 创建用户 通过root管理员权限可以创建各种用户,并为他们分配权限及可以操作的数据库. 语法:create user '用户名'@'ip ...