Apache Maven中pom.xml和有效pom有什么区别?

时间:2014-09-30 07:08:21

标签: maven

有人可以向我解释一下apache maven项目中文件pom.xml和文件有效pom.xml之间的区别是什么?

3 个答案:

答案 0 :(得分:41)

超级POM

所有Maven项目POM都扩展了Super POM,它定义了所有项目共享的一组默认值。

最简单的POM

所有Maven POM都继承了Super POM的默认值。如果您只是编写一个从src / main / java中的某个源生成JAR的简单项目,想要在src / test / java中运行JUnit测试,并且想要使用mvn站点构建项目站点,则不要必须定制任何东西。在这种情况下,您所需要的只是最简单的POM中显示的最简单的POM。此POM定义了groupId,artifactId和version:每个项目所需的三个坐标。

有效POM

Super POM与最简单POM的POM之间的合并。

** 此信息摘自以下链接(在链接中解释非常完整)

http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom.html

答案 1 :(得分:4)

有效的 POM

Effective POM 是您的 POM(您项目中的 pom.xml)和 super POM

如果你想从你的项目中看到有效的 POM,执行以下命令:

header name that contains a token

通过这个,你可以看到 Maven 使用的默认值。


超级POM

超级 POM 文件定义了所有默认配置。因此,即使是最简单的 POM 文件形式也会继承超级 POM 文件中定义的所有配置。

我们可以在 ${M2_HOME}/lib, maven-model-builder-.jar 文件中对其进行可视化。如果我们打开这个 JAR 文件,我们会在 org/apache/maven/model/pom-4.0.0.xml 名称下找到它。

它包含以下信息:

  1. 存储库(maven 从中下载依赖项)
  2. PluginRepository(maven 下载插件的地方)
  3. 构建(目录、资源、插件管理)
  4. Reporting(报告的输出目录)
  5. 个人资料

通过这种方式,maven 实现了约定优于配置,这意味着开发人员不需要自己创建构建过程。开发人员不必提及每一个配置细节。

我在 Baeldung 中写了一篇关于此的完整文章:Difference Between Super, Simplest, and Effective POM

答案 2 :(得分:1)

您可以使用

查看pom.xml与有效pom.xml的区别
mvn help:effective-pom

describe here

在多模块项目中,您将使用父pom.xml定义所有模块的常规设置,然后在每个模块中只有特定设置。

上述目标将帮助您分析当前实际使用的pom,而不是父参考。

整个想法是通过使用泛化(super-pom)/ specialization(模块pom)方法,有一个中心位置,您可以在其中指定常规配置。这比必须切割和粘贴一般部件更有效。

请注意,有效的pom会添加默认行为,例如对于jar插件,以便您可以调试

等问题

Maven JAR Plugin 3.0.2 Error: You have to use a classifier to attach supplemental artifacts to the project instead of replacing them

采用这种方法。另请参阅Maven `help:effective-pom` only generating for a single project, not all projects