课程表

Maven课程

工具箱
速查手册

Maven POM

当前位置:免费教程 » 软件/图像 » Maven

POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。

POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。

POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

在创建 POM 之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。

POM 举例

  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/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.companyname.project-group</groupId>
  7. <artifactId>project</artifactId>
  8. <version>1.0</version>
  9. </project>

需要说明的是每个工程应该只有一个 POM 文件。

  • 所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version
  • 在仓库中的工程标识为 groupId:artifactId:version
  • POM.xml 的根元素是 project,它有三个主要的子节点:
节点 描述
groupId 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。
artifactId 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.

Super POM

所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。

Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。

查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom

在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。

在下面的例子中,我们在 C:\MVN\project 目录中创建了一个 pom.xml 文件。

现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。

  1. C:\MVN\project>mvn help:effective-pom

Maven 将会开始处理并显示 effective-pom。

  1. [INFO] Scanning for projects...
  2. [INFO] Searching repository for plugin with prefix: 'help'.
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
  5. [INFO] task-segment: [help:effective-pom] (aggregator-style)
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] [help:effective-pom {execution: default-cli}]
  8. [INFO]
  9. .....
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD SUCCESSFUL
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: < 1 second
  14. [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
  15. [INFO] Final Memory: 6M/15M
  16. [INFO] ------------------------------------------------------------------------

Effective POM 的结果就像在控制台中显示的一样,经过继承、插值之后,使配置生效。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- ================================================================= -->
  3. <!-- -->
  4. <!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51 -->
  5. <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
  6. <!-- -->
  7. <!-- ================================================================= -->
  8. <!-- ================================================================= -->
  9. <!-- -->
  10. <!-- Effective POM for project -->
  11. <!-- 'com.companyname.project-group:project-name:jar:1.0' -->
  12. <!-- -->
  13. <!-- ================================================================= -->
  14. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
  15. 2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
  16. ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  17. <modelVersion>4.0.0</modelVersion>
  18. <groupId>com.companyname.project-group</groupId>
  19. <artifactId>project</artifactId>
  20. <version>1.0</version>
  21. <build>
  22. <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
  23. <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
  24. <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
  25. <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
  26. <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
  27. <resources>
  28. <resource>
  29. <mergeId>resource-0</mergeId>
  30. <directory>C:\MVN\project\src\main\resources</directory>
  31. </resource>
  32. </resources>
  33. <testResources>
  34. <testResource>
  35. <mergeId>resource-1</mergeId>
  36. <directory>C:\MVN\project\src\test\resources</directory>
  37. </testResource>
  38. </testResources>
  39. <directory>C:\MVN\project\target</directory>
  40. <finalName>project-1.0</finalName>
  41. <pluginManagement>
  42. <plugins>
  43. <plugin>
  44. <artifactId>maven-antrun-plugin</artifactId>
  45. <version>1.3</version>
  46. </plugin>
  47. <plugin>
  48. <artifactId>maven-assembly-plugin</artifactId>
  49. <version>2.2-beta-2</version>
  50. </plugin>
  51. <plugin>
  52. <artifactId>maven-clean-plugin</artifactId>
  53. <version>2.2</version>
  54. </plugin>
  55. <plugin>
  56. <artifactId>maven-compiler-plugin</artifactId>
  57. <version>2.0.2</version>
  58. </plugin>
  59. <plugin>
  60. <artifactId>maven-dependency-plugin</artifactId>
  61. <version>2.0</version>
  62. </plugin>
  63. <plugin>
  64. <artifactId>maven-deploy-plugin</artifactId>
  65. <version>2.4</version>
  66. </plugin>
  67. <plugin>
  68. <artifactId>maven-ear-plugin</artifactId>
  69. <version>2.3.1</version>
  70. </plugin>
  71. <plugin>
  72. <artifactId>maven-ejb-plugin</artifactId>
  73. <version>2.1</version>
  74. </plugin>
  75. <plugin>
  76. <artifactId>maven-install-plugin</artifactId>
  77. <version>2.2</version>
  78. </plugin>
  79. <plugin>
  80. <artifactId>maven-jar-plugin</artifactId>
  81. <version>2.2</version>
  82. </plugin>
  83. <plugin>
  84. <artifactId>maven-javadoc-plugin</artifactId>
  85. <version>2.5</version>
  86. </plugin>
  87. <plugin>
  88. <artifactId>maven-plugin-plugin</artifactId>
  89. <version>2.4.3</version>
  90. </plugin>
  91. <plugin>
  92. <artifactId>maven-rar-plugin</artifactId>
  93. <version>2.2</version>
  94. </plugin>
  95. <plugin>
  96. <artifactId>maven-release-plugin</artifactId>
  97. <version>2.0-beta-8</version>
  98. </plugin>
  99. <plugin>
  100. <artifactId>maven-resources-plugin</artifactId>
  101. <version>2.3</version>
  102. </plugin>
  103. <plugin>
  104. <artifactId>maven-site-plugin</artifactId>
  105. <version>2.0-beta-7</version>
  106. </plugin>
  107. <plugin>
  108. <artifactId>maven-source-plugin</artifactId>
  109. <version>2.0.4</version>
  110. </plugin>
  111. <plugin>
  112. <artifactId>maven-surefire-plugin</artifactId>
  113. <version>2.4.3</version>
  114. </plugin>
  115. <plugin>
  116. <artifactId>maven-war-plugin</artifactId>
  117. <version>2.1-alpha-2</version>
  118. </plugin>
  119. </plugins>
  120. </pluginManagement>
  121. <plugins>
  122. <plugin>
  123. <artifactId>maven-help-plugin</artifactId>
  124. <version>2.1.1</version>
  125. </plugin>
  126. </plugins>
  127. </build>
  128. <repositories>
  129. <repository>
  130. <snapshots>
  131. <enabled>false</enabled>
  132. </snapshots>
  133. <id>central</id>
  134. <name>Maven Repository Switchboard</name>
  135. <url>http://repo1.maven.org/maven2</url>
  136. </repository>
  137. </repositories>
  138. <pluginRepositories>
  139. <pluginRepository>
  140. <releases>
  141. <updatePolicy>never</updatePolicy>
  142. </releases>
  143. <snapshots>
  144. <enabled>false</enabled>
  145. </snapshots>
  146. <id>central</id>
  147. <name>Maven Plugin Repository</name>
  148. <url>http://repo1.maven.org/maven2</url>
  149. </pluginRepository>
  150. </pluginRepositories>
  151. <reporting>
  152. <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  153. </reporting>
  154. </project>

在上面的 pom.xml 中,你可以看到 Maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。

Maven 的 pom.xml 文件也不需要手工编写。

Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。

详细内容请参考 Maven - 插件Maven - 创建工程 部分的内容。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号