一、什么是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. Numpy

    一  : 安装ipython以及用到的包介绍 # 这里我们会用到ipython解释器,本文代码在ipython下运行 Pip3 install ipython Pip3 install jupyter ...

  2. HTML5新特性:元素的classList属性与应用

    在html5新增的classList之前, 操作元素的class用的是className这个属性,而如果要向jquery封装的hasClass, removeClass, addClass, togg ...

  3. SEO的基本概念 和 提交SITEMAP到搜索引擎

    SEO的基本概念 SEO的基本概念 :我们接触的SEO主要就是做搜索引擎的优化,让搜索引擎更好地收录 我们的网站,不管是首页还是内页,都能有很好的收录和排名.那么我们经常用到的SEO的语句是什么呢?小 ...

  4. 初学Python之 布尔类型

    与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ==> True True and False # ==> False False an ...

  5. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

  6. linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  7. Elasticsearch Head插件实践

    简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...

  8. 申请的服务器安装tomcat后不能访问的问题

    新申请的阿里云服务器,操作系统是CentOS6.5,安装jdk1.8版本,用java -version命令可以查看jdk版本,安装正确会有版本显示.然后安装tomcat,tomcat安装后默认端口是8 ...

  9. Java学习笔记14(面向对象七:final、static)

    final:意为最终,不可变,是一个修饰词 有时候一个类地功能被开发好了,不想让子类重写,修改,这里就会用到final关键字 final修饰类: 不可以被继承,但是可以继承其他类 示例: public ...

  10. python3函数

    一.python3函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.可以自己创建函数,这被叫做用户自定义函数. 1.定义函数规则 函 ...