一、什么是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. sqlalchemy 踩过的坑

    记录下Sqlalchemy遇到的问题,不定时更新. 设置主键为非自增 sqlalchemy 在sql server中默认主键是自增的,如果在数据库设置的主键不是自增的,这个时候插入就会出现异常: 提示 ...

  2. 关于php变量的赋值和引用的区别

    刚开始学习php,发现有些地方和js语法不同,所以记录下来. 这篇文章是总结php中变量赋值和引用的区别. 我们知道,js中,原始类型的赋值,是将值直接复制给变量:引用类型的赋值,是将内存地址复制给变 ...

  3. windows系统操作

    1.怎么更新补丁 有些软件的运行需要windows要安装相关的补丁,除了去微软官网下载补丁外,可以用windows自带的“系统更新”来完成,省去找补丁下载以及研究系统缺少哪些补丁. 控制面板--> ...

  4. [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

    1:出现此种错误应该是jar版本包冲突了,启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突,下面贴一下错误, ...

  5. 【三分模板】洛谷P3382三分模板

    题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 输入输出格式 输入格式: 第一行一次包含一个正整数N和两个实数l.r,含 ...

  6. 找出生成json中的error_code,并加以处理

    需求: 前段时间调用了百度AI的分词接口,因为不完全支持并发,一些调用产生了错误,混在json内部. 现在需要将未调用成功的内容重新调用一遍. 思考过程: 方法一: 开始想到的是调用的过程当中,如果报 ...

  7. windbg关于.NET分析的扩展命令

    收到一个dump文件,运行环境的.net framework的详细版本是多少呢? dump信息与性能计数器结合分析时,想知道该dump运行的进程号是多少? dump定位到有效的堆栈信息,而对应的源码是 ...

  8. 记录因webpack版本问题导致vue-cli快速搭建的项目运行时报错!

    今日突然在群里见到好几个小伙伴说在创建vue项目后不能跑,会报错. 刚开始还不信,花了几分钟时间自己试了下,还真报错了!如下图 小伙伴的报错,如下图!   百思不得其解,看了运行的日志也找不出原因.于 ...

  9. 使用 GStreamer appsrc 等插件实现视频音频混流,录制和推流

    目前在做的在线直播教室,需要将老师分享的屏幕和老师的声音.学生的声音录制为一个视频文件,以便学生上课后还可以再看回放. 直播服务我们采用的是腾讯的视频服务,有现成的 SDK 可以用.但 SDK 自带的 ...

  10. CTF---Web入门第五题 貌似有点难

    貌似有点难分值:20 来源: 西普学院 难度:难 参与人数:7249人 Get Flag:2519人 答题人数:2690人 解题通过率:94% 不多说,去看题目吧. 解题链接: http://ctf5 ...