有人可以向我解释一下apache maven项目中文件pom.xml和文件有效pom.xml之间的区别是什么?
答案 0 :(得分:41)
所有Maven项目POM都扩展了Super POM,它定义了所有项目共享的一组默认值。
所有Maven POM都继承了Super POM的默认值。如果您只是编写一个从src / main / java中的某个源生成JAR的简单项目,想要在src / test / java中运行JUnit测试,并且想要使用mvn站点构建项目站点,则不要必须定制任何东西。在这种情况下,您所需要的只是最简单的POM中显示的最简单的POM。此POM定义了groupId,artifactId和version:每个项目所需的三个坐标。
Super POM与最简单POM的POM之间的合并。
** 此信息摘自以下链接(在链接中解释非常完整)
http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom.html
答案 1 :(得分:4)
Effective POM 是您的 POM(您项目中的 pom.xml)和 super POM。
如果你想从你的项目中看到有效的 POM,执行以下命令:
header name that contains a token
通过这个,你可以看到 Maven 使用的默认值。
超级 POM 文件定义了所有默认配置。因此,即使是最简单的 POM 文件形式也会继承超级 POM 文件中定义的所有配置。
我们可以在 ${M2_HOME}/lib, maven-model-builder-.jar 文件中对其进行可视化。如果我们打开这个 JAR 文件,我们会在 org/apache/maven/model/pom-4.0.0.xml 名称下找到它。
它包含以下信息:
通过这种方式,maven 实现了约定优于配置,这意味着开发人员不需要自己创建构建过程。开发人员不必提及每一个配置细节。
我在 Baeldung 中写了一篇关于此的完整文章:Difference Between Super, Simplest, and Effective POM。
答案 2 :(得分:1)
您可以使用
查看pom.xml与有效pom.xml的区别mvn help:effective-pom
在多模块项目中,您将使用父pom.xml定义所有模块的常规设置,然后在每个模块中只有特定设置。
上述目标将帮助您分析当前实际使用的pom,而不是父参考。
整个想法是通过使用泛化(super-pom)/ specialization(模块pom)方法,有一个中心位置,您可以在其中指定常规配置。这比必须切割和粘贴一般部件更有效。
请注意,有效的pom会添加默认行为,例如对于jar插件,以便您可以调试
等问题 采用这种方法。另请参阅Maven `help:effective-pom` only generating for a single project, not all projects