maven pom.xml依赖项顺序vs classpath / build路径顺序

时间:2015-06-08 15:23:03

标签: maven classpath pom.xml buildpath maven-eclipse-plugin

我试图理解项目的pom.xml文件中的依赖项与java类路径/构建路径的顺序之间的联系(我的问题也是关于poms的继承)。

到目前为止,我无法找到详细的逐步解释。

我已经注意到它确实不是“相同”,这意味着,有时我在pom.xml中的依赖关系不会出现在eclipse的构建路径中,或者不会以相同的顺序出现(在提交之后) mvn eclipse:eclipse - $ someflag )。

我们假设我有以下父pom:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>SOME_GROUP_ID</groupId>
<artifactId>PARENT</artifactId>
<version>SOME_VERSION</version>
<name>${project.groupId}:${project.artifactId}</name>
<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>SOME_OTHER_ARTIFACT1</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
<modules>
<module>CHILD</module>
</modules>
</project>

并且其他项目的pom.xml继承了它:

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>SOME_GROUP_ID</groupId>
    <artifactId>PARENT</artifactId>
    <version>SOME_VERSION</version>
</parent>
<artifactId>CHILD</artifactId>
<name>${project.groupId}:${project.artifactId}</name>
<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>SOME_OTHER_ARTIFACT2</artifactId>
        <version>${project.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
</project>

我的问题是:如果我现在在 CHILD 项目上运行 mvn eclipse:eclipse - $ someflag

  1. CHILD项目的构建路径是否应该包含:PARENT,SOME_OTHER_ARTIFACT1,SOME_OTHER_ARTIFACT2?不确定?何时以及为什么其中一个应该/不应该出现在构建路径中?
  2. CHILD项目的 classpath 文件是否应该包含:PARENT,SOME_OTHER_ARTIFACT1,SOME_OTHER_ARTIFACT2?不确定?何时以及为什么其中一个应该/不应该出现在构建路径中?
  3. 是否与运行 mvn eclipse:eclipse 时使用的标志(即 $ someflag )有关?
  4. 库中的jar是否也应该按照正在初始化的项目中的依赖项的顺序出现?即父母,SOME_OTHER_ARTIFACT1,SOME_OTHER_ARTIFACT2(从上到下)必然?订单何时以及为何应该不同?
  5. 谢谢

1 个答案:

答案 0 :(得分:0)

重新“我的问题也是关于poms的继承”

请参阅 Maven:完整参考Project Inheritance

  

如果您的项目通过父元素使用继承,则可以避免重复自己。当项目指定父项时,它将继承父项目的POM中的信息。然后它可以覆盖并添加到此父POM中指定的值。

...和Multi-module vs. Inheritance

  

从父项目继承和由多模块项目管理之间存在差异。父项目是将其值传递给其子项的项目。多模块项目只管理一组其他子项目或模块。