2016-06-17 4 views
0

Итак, у меня есть проблема, то есть - Maven, похоже, игнорирует зависимости, хотя они должны быть видны в иерархии.Поиск иерархической зависимости Maven

Я следующая иерархия проекта:
родителя
--projA
--sub-Parent1
---- projB
---- projC

Всех уровней связаны через <parent> теге , sub-parent1 имеет projB и projC, объявленные как модули и не заявленные зависимости. Но projB имеет зависимость от projA. И построение всего модуля sub-parent1 не будет строить projA, что странно, потому что projB знает о sub-parent1 и sub-parent1 знает о parent и знает о зависимости (projA). Но maven не строит его всякий раз, когда я строю целые sub-parent1 или, например, -pl projB -am clean install.
Любая помощь приветствуется.

Редактировать: Я создал структуру, представляющую эту структуру. Попробуйте построить суб-родителя: dropmefiles.com/5l42j

Edit: родительский 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 - эта проблема отличается, поскольку она касается не только многомодульного, но и многоуровневого (нескольких уровней модулей) проекта и человека, там не было сказано, что maven явно строить зависимостей.

Решение: Так что, кажется, единственное решение - построить такую ​​многоуровневую структуру из верхнего наиболее уровня П, в моем случае это будет родитель (так родитель текущий реж) и адрес модулю вам нужно построить по относительному пути от родителя. Это приводит к:

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

Так что, кажется, единственное решение - построить такую ​​многоуровневую структуру из верхнего наиболее уровня ПОМ, в моем случае это будет родителем (так что родительский текущий каталог) и адресный модуль, который вам нужно построить по относительному пути от родителя. Это приводит к:

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

Порядок будет:

[INFO] Reactor Build Order: 
[INFO] 
[INFO] parent 
[INFO] projA 
[INFO] sub-parent1 
[INFO] projB 
Смежные вопросы