2016-06-17 66 views
0

所以我有一个问题,那就是 - Maven似乎忽略依赖关系,即使它们应该在层次结构中可见。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

编辑: 父POM:

<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相同的解决方案 - 这个问题是不同的,因为它不仅处理multimodule,但与多级(模块的几个层次)项目和人没有明确告诉maven构建依赖关系。

解决方案: 如此看来唯一的解决办法是 - 从最上面的级POM建立这样的多级结构,在我的情况下,这将是父(所以父母是当前目录)和地址模块你需要建立通过父代的相对路径。这导致:

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

的顺序将是:

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

你可以发布你所有的POM的?也许有一个版本不匹配? – Tunaki

+0

@Tunaki在这里,我创建了一个代表这个结构的结构。尝试构建子父项:http://dropmefiles.com/5l42j – user3177112

+0

@Tunaki添加了poms – user3177112

回答

0

如此看来唯一的解决办法是 - 从最上面的级POM建立这样的多级结构,在我的情况下,这将是父(所以父目录是当前目录)和地址模块,你需要通过父代的相对路径来构建。这导致:

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

的顺序将是:

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