Maven分层依赖搜索

时间:2016-06-17 11:44:21

标签: maven maven-reactor

所以我遇到了一个问题,那就是 - Maven似乎忽略了依赖关系,即使它们应该在层次结构中可见。

我有以下项目层次结构:

--projA
--sub-parent1
---- projB
---- projC

所有级别都通过<parent>标记链接。 sub-parent1已将projBprojC声明为模块,并且未声明任何依赖项。但projB依赖projA。构建整个sub-parent1模块不会构建projA,这很奇怪,因为projB知道sub-parent1sub-parent1知道parent并且它知道依赖(projA)。但是,每当我构建整个sub-parent1或者-pl projB -am clean install时,maven就不会构建它 任何帮助表示赞赏。

编辑: 我创建了一个代表这种结构的结构。尝试构建子父级:dropmefiles.com/5l42j

编辑: 父母:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>


    <modules>
        <module>projA</module>
        <module>sub-parent1</module>
    </modules>

</project>

projA:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <parent>
        <groupId>test</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>projA</artifactId>
    <version>1.0</version>

</project>

子parent1:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>test</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>sub-parent1</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>

    <modules>
        <module>projB</module>
    </modules>

</project>

projB:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <parent>
        <groupId>test</groupId>
        <artifactId>sub-parent1</artifactId>
        <version>1.0</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>projB</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>test</groupId>
            <artifactId>projA</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

</project>

编辑: 虽然我有与Maven multi module project cannot find sibling module中相同的解决方案 - 但这个问题不同,因为它不仅涉及多模块,而且涉及多级(多级模块)项目和人员,并没有明确地告诉maven建立依赖关系。

解决方案: 因此,似乎唯一的解决方案是 - 从最高级别的pom构建这样的多级结构,在我的情况下,它将是父级(所以父级是当前目录)和地址模块,您需要通过父级的相对路径来构建。结果是:

mvn -pl sub-parent1/projB -am clean install

订单将是:

[INFO] Reactor Build Order:
[INFO]
[INFO] parent
[INFO] projA
[INFO] sub-parent1
[INFO] projB

1 个答案:

答案 0 :(得分:0)

所以似乎唯一的解决方案是 - 从最上层的pom构建这样的多级结构,在我的例子中它将是父级(所以父级是当前的dir)和你需要通过父级的相对路径构建的地址模块。结果是:

mvn -pl sub-parent1/projB -am clean install

订单将是:

[INFO] Reactor Build Order:
[INFO]
[INFO] parent
[INFO] projA
[INFO] sub-parent1
[INFO] projB