一、什么是POM

Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

一个完整的pom.xml文件,放置在项目的根目录下。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/maven-v4_0_0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <!– The Basics –>
  7. <groupId>…</groupId>
  8. <artifactId>…</artifactId>
  9. <version>…</version>
  10. <packaging>…</packaging>
  11. <dependencies>…</dependencies>
  12. <parent>…</parent>
  13. <dependencyManagement>…</dependencyManagement>
  14. <modules>…</modules>
  15. <properties>…</properties>
  16. <!– Build Settings –>
  17. <build>…</build>
  18. <reporting>…</reporting>
  19. <!– More Project Information –>
  20. <name>…</name>
  21. <description>…</description>
  22. <url>…</url>
  23. <inceptionYear>…</inceptionYear>
  24. <licenses>…</licenses>
  25. <organization>…</organization>
  26. <developers>…</developers>
  27. <contributors>…</contributors>
  28. <!– Environment Settings –>
  29. <issueManagement>…</issueManagement>
  30. <ciManagement>…</ciManagement>
  31. <mailingLists>…</mailingLists>
  32. <scm>…</scm>
  33. <prerequisites>…</prerequisites>
  34. <repositories>…</repositories>
  35. <pluginRepositories>…</pluginRepositories>
  36. <distributionManagement>…</distributionManagement>
  37. <profiles>…</profiles>
  38. </project>

二、基本设置

1、maven的协作相关属性

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/maven-v4_0_0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.codehaus.mojo</groupId>
  7. <artifactId>my-project</artifactId>
  8. <version>1.0</version>
  9. <packaging>war</packaging>
  10. </project>
  1. groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
  2. artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
  3. version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
  4. packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par

2、POM之间的关系

主要用于POM文件的复用。

a)依赖关系:依赖关系列表(dependency list)是POM的重要部分

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.0</version>
  6. <scope>test</scope>
  7. </dependency>
  8. </dependencies>
  1. groupId , artifactId , version :
  2. scope : compile(default),provided,runtime,test,system
  3. exclusions

b)继承关系:继承其他pom.xml配置的机制。

比如父pom.xml:

  1. <project>
  2. [...]
  3. <dependencies>
  4. <dependency>
  5. <groupId>junit</groupId>
  6. <artifactId>junit</artifactId>
  7. <version>4.4</version>
  8. <scope>test</scope>
  9. </dependency>
  10. </dependencies>
  11. [...]
  12. </project>

在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):

  1. [...]
  2. <parent>
  3. <groupId>com.devzuz.mvnbook.proficio</groupId>
  4. <artifactId>proficio</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. </parent>
  7. [...]

在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:

  1. <project>
  2. <modelVersion>4.0.0</modelVersion>
  3. <name>Maven Default Project</name>
  4. <repositories>
  5. <repository>
  6. <id>central</id>
  7. <name>Maven Repository Switchboard</name>
  8. <layout>default</layout>
  9. <url>http://repo1.maven.org/maven2</url>
  10. <snapshots>
  11. <enabled>false</enabled>
  12. </snapshots>
  13. </repository>
  14. </repositories>
  15. <pluginRepositories>
  16. <pluginRepository>
  17. <id>central</id>
  18. <name>Maven Plugin Repository</name>
  19. <url>http://repo1.maven.org/maven2</url>
  20. <layout>default</layout>
  21. <snapshots>
  22. <enabled>false</enabled>
  23. </snapshots>
  24. <releases>
  25. <updatePolicy>never</updatePolicy>
  26. </releases>
  27. </pluginRepository>
  28. </pluginRepositories>
  29. <build>
  30. <directory>target</directory>
  31. <outputDirectory>target/classes</outputDirectory>
  32. <finalName>${project.artifactId}-${project.version}</finalName>
  33. <testOutputDirectory>target/test-classes</testOutputDirectory>
  34. <sourceDirectory>src/main/java</sourceDirectory>
  35. <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
  36. <testSourceDirectory>src/test/java</testSourceDirectory>
  37. <resources>
  38. <resource>
  39. <directory>src/main/resources</directory>
  40. </resource>
  41. </resources>
  42. <testResources>
  43. <testResource>
  44. <directory>src/test/resources</directory>
  45. </testResource>
  46. </testResources>
  47. <pluginManagement>
  48. <plugins>
  49. <plugin>
  50. <artifactId>maven-antrun-plugin</artifactId>
  51. <version>1.1</version>
  52. </plugin>
  53. <plugin>
  54. <artifactId>maven-assembly-plugin</artifactId>
  55. <version>2.2-beta-2</version>
  56. </plugin>
  57. <plugin>
  58. <artifactId>maven-clean-plugin</artifactId>
  59. <version>2.2</version>
  60. </plugin>
  61. <plugin>
  62. <artifactId>maven-compiler-plugin</artifactId>
  63. <version>2.0.2</version>
  64. </plugin>
  65. <plugin>
  66. <artifactId>maven-dependency-plugin</artifactId>
  67. <version>2.0</version>
  68. </plugin>
  69. <plugin>
  70. <artifactId>maven-deploy-plugin</artifactId>
  71. <version>2.3</version>
  72. </plugin>
  73. <plugin>
  74. <artifactId>maven-ear-plugin</artifactId>
  75. <version>2.3.1</version>
  76. </plugin>
  77. <plugin>
  78. <artifactId>maven-ejb-plugin</artifactId>
  79. <version>2.1</version>
  80. </plugin>
  81. <plugin>
  82. <artifactId>maven-install-plugin</artifactId>
  83. <version>2.2</version>
  84. </plugin>
  85. <plugin>
  86. <artifactId>maven-jar-plugin</artifactId>
  87. <version>2.2</version>
  88. </plugin>
  89. <plugin>
  90. <artifactId>maven-javadoc-plugin</artifactId>
  91. <version>2.4</version>
  92. </plugin>
  93. <plugin>
  94. <artifactId>maven-plugin-plugin</artifactId>
  95. <version>2.4.1</version>
  96. </plugin>
  97. <plugin>
  98. <artifactId>maven-rar-plugin</artifactId>
  99. <version>2.2</version>
  100. </plugin>
  101. <plugin>
  102. <artifactId>maven-release-plugin</artifactId>
  103. <version>2.0-beta-7</version>
  104. </plugin>
  105. <plugin>
  106. <artifactId>maven-resources-plugin</artifactId>
  107. <version>2.2</version>
  108. </plugin>
  109. <plugin>
  110. <artifactId>maven-site-plugin</artifactId>
  111. <version>2.0-beta-6</version>
  112. </plugin>
  113. <plugin>
  114. <artifactId>maven-source-plugin</artifactId>
  115. <version>2.0.4</version>
  116. </plugin>
  117. <plugin>
  118. <artifactId>maven-surefire-plugin</artifactId>
  119. <version>2.4.2</version>
  120. </plugin>
  121. <plugin>
  122. <artifactId>maven-war-plugin</artifactId>
  123. <version>2.1-alpha-1</version>
  124. </plugin>
  125. </plugins>
  126. </pluginManagement>
  127. </build>
  128. <reporting>
  129. <outputDirectory>target/site</outputDirectory>
  130. </reporting>
  131. <profiles>
  132. <profile>
  133. <id>release-profile</id>
  134. <activation>
  135. <property>
  136. <name>performRelease</name>
  137. <value>true</value>
  138. </property>
  139. </activation>
  140. <build>
  141. <plugins>
  142. <plugin>
  143. <inherited>true</inherited>
  144. <groupId>org.apache.maven.plugins</groupId>
  145. <artifactId>maven-source-plugin</artifactId>
  146. <executions>
  147. <execution>
  148. <id>attach-sources</id>
  149. <goals>
  150. <goal>jar</goal>
  151. </goals>
  152. </execution>
  153. </executions>
  154. </plugin>
  155. <plugin>
  156. <inherited>true</inherited>
  157. <groupId>org.apache.maven.plugins</groupId>
  158. <artifactId>maven-javadoc-plugin</artifactId>
  159. <executions>
  160. <execution>
  161. <id>attach-javadocs</id>
  162. <goals>
  163. <goal>jar</goal>
  164. </goals>
  165. </execution>
  166. </executions>
  167. </plugin>
  168. <plugin>
  169. <inherited>true</inherited>
  170. <groupId>org.apache.maven.plugins</groupId>
  171. <artifactId>maven-deploy-plugin</artifactId>
  172. <configuration>
  173. <updateReleaseInfo>true</updateReleaseInfo>
  174. </configuration>
  175. </plugin>
  176. </plugins>
  177. </build>
  178. </profile>
  179. </profiles>
  180. </project>

可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pom

c)聚合关系:用于将多个maven项目聚合为一个大的项目。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/maven-v4_0_0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.codehaus.mojo</groupId>
  7. <artifactId>my-parent</artifactId>
  8. <version>2.0</version>
  9. <modules>
  10. <module>my-project<module>
  11. </modules>
  12. </project>

3、属性

maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:

  1. env.X:操作系统环境变量,比如${env.PATH}
  2. project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
  3. settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
  4. Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
  5. 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}

4、构建设置

构建有两种build标签:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/maven-v4_0_0.xsd">
  5. <!– "Project Build" contains more elements than just the BaseBuild set –>
  6. <build>…</build>
  7. <profiles>
  8. <profile>
  9. <!– "Profile Build" contains a subset of "Project Build"s elements –>
  10. <build>…</build>
  11. </profile>
  12. </profiles>
  13. </project>

build中的主要标签:Resources和Plugins。

Resources:用于排除或包含某些资源文件

  1. <resources>
  2. <resource>
  3. <targetPath>META-INF/plexus</targetPath>
  4. <filtering>false</filtering>
  5. <directory>${basedir}/src/main/plexus</directory>
  6. <includes>
  7. <include>configuration.xml</include>
  8. </includes>
  9. <excludes>
  10. <exclude>**/*.properties</exclude>
  11. </excludes>
  12. </resource>
  13. </resources>

Plugins:设置构建的插件

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.plugins</groupId>
    5. <artifactId>maven-jar-plugin</artifactId>
    6. <version>2.0</version>
    7. <extensions>false</extensions>
    8. <inherited>true</inherited>
    9. <configuration>
    10. <classifier>test</classifier>
    11. </configuration>
    12. <dependencies>…</dependencies>
    13. <executions>…</executions>
    14. </plugin>

maven pom.xml 详细的更多相关文章

  1. maven pom.xml详细介绍,必须留一份

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  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 全配置(一)常用配置

    Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...

  6. Maven - pom.xml 文件

    章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段 ...

  7. myeclipse maven pom.xml 配置错误

    http://www.oschina.net/question/2265006_219341#tags_nav maven pom.xml 配置文件错误       腾讯云消息队列CMQ架构解析> ...

  8. 在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样

    [参考]:maven pom.xml加载不同properties配置[转] 首先 看看效果: 点开我们项目中的Maven projects 后,会发现右侧 我们profile有个可勾选选项.默认勾选l ...

  9. Maven pom.xml文件详解

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

随机推荐

  1. Vue 爬坑之路(七)—— 监听滚动事件 实现动态锚点

    前几天做项目的时候,需要实现一个动态锚点的效果 如果是传统项目,这个效果就非常简单.但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 animate() 方法的情况下,如何实现平滑 ...

  2. angular4.0中form表单双向数据绑定正确姿势

    issue:用[(ngModel)]="property"指令双向数据绑定,报错. reason1:使用ngModel绑定数据需要注入FormsModule模块,在app.modu ...

  3. 计算机基础理论知识梳理篇(三):VLAN与VLAN网卡相关概念

    VLAN(Virtual Local Area Network) 虚拟局域网(VLAN,802.1Q)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能.部门及应用等因素将它们 ...

  4. Java学习笔记9(面向对象二:this、继承、抽象类)

    就近原则: 类中的方法中的变量和成员变量重名时,调用类的方法时候,生效的是方法中的变量,如果方法中没有定义变量,才会去成员变量中寻找 于是,提出了this关键字,为了区分重名问题 public cla ...

  5. I/O模型详细解析

    内核空间和用户空间:由于操作系统都包括内核空间和用户空间(或者说内核态和用户态),内核空间主要存放的是内核代码和数据,是供系统进程使用的空间.而用户空间主要存放的是用户代码和数据,是供用户进程使用的空 ...

  6. python 中__setattr__, __getattr__,__getattribute__, __call__使用方法

    object._getattr_(self, name) 拦截点号运算.当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法.如果继承树可以找到该属性,则不调用此方法 实例in ...

  7. mysql 在B数据库下 创建一个与A数据库中一样的表

    1.创建数据内容与结构一致(不会复制索引以及外键) create table B.test as select * from A.test; 2.把上面的步骤分开,先复制结构 create table ...

  8. 前端构建工具gulp之基本介绍

    1.基本介绍 gulp.js是一个自动化构建工具,是自动化项目的构建利器.可以对网站的资源进行优化,将开发过程中一些重复的任务通过执行命令自动完成.这样能很大的提高我们的工作效率. gulp.js是基 ...

  9. CTF---安全杂项入门第二题 A记录

    A记录分值:20 来源: sammie 难度:中 参与人数:2255人 Get Flag:566人 答题人数:621人 解题通过率:91% 他在看什么视频,好像很好看,不知道是什么网站的. 还好我截取 ...

  10. bzoj:1659: [Usaco2006 Mar]Lights Out 关灯

    Description 奶牛们喜欢在黑暗中睡觉.每天晚上,他们的牲口棚有L(3<=L<=50)盏灯,他们想让亮着的灯尽可能的少.他们知道按钮开关的位置,但喜闻乐见的是他们并没有手指.你得到 ...