отсутствует мультимодульный родительский модуль maven2 - PullRequest
0 голосов
/ 17 августа 2011

Это мой первый вопрос по StackOverflow.Изучил немного, читая другие вопросы и ответы.

Вопрос о мультимодуле Maven.

Ниже приведена структура моего проекта:

commons-parent
|--pom.xml
|--commons-module1
   |--pom.xml
   |--core
      |--pom.xml
   |--cli
      |--pom.xml

cli обозначает интерфейс командной строки.

commons-module1 - это библиотека, которая будет использоваться различными проектами внутри компании.commons-module1 / core содержит pom, который упаковывает только библиотечные классы.commons-module1 / cli содержит pom, который упаковывает тестовые программы командной строки.

commons-parent / pom.xml (соответствующий фрагмент):

<groupId>com.abc.def</groupId>
<artifactId>commons-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<profile>
    <id>reactor</id>
    <properties>
        <env.type>dev</env.type>
    </properties>
    <modules>
        <module>../commons-module1</module>
    </modules>
</profile>

there is a distribution management section 
but there is no repositories section in pom.

commons-module1 / pom.xml (соответствующий фрагмент):

<parent>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>   

<groupId>com.abc.def</groupId>
<artifactId>commons-module1</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<modules>
    <module>cli</module>
    <module>core</module>
</modules>


there is a distribution management section 
but there is no repositories section in pom.

commons-module1 / core / pom.xml (соответствующий фрагмент):

<parent>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-module1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>   

<groupId>com.abc.def</groupId>
<artifactId>commons-module1-core</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>


there is a distribution management section 
but there is no repositories section in pom.

commons-module1 / cli / pom.xml (соответствующий фрагмент):

<parent>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-module1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>   

<groupId>com.abc.def</groupId>
<artifactId>commons-module1-cli</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>


there is a distribution management section 
but there is no repositories section in pom.

Среда:

 Apache Maven 2.1.0 (r755702; 2009-03-18 19:10:27+0000)
 Java version: 1.6.0_25

Описание проблемы:

Когда проект должен зависеть от commons-module1-core, проект будет зависеть от maven в pom следующим образом:

<dependency>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-module1-core</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

Thisработает только (т.е. удовлетворяются зависимости), когда все три иерархии commons-parent, commons-module1, commons-module1-core все три находятся в локальном хранилище.Это не сработает, если у меня пропадет какой-либо из них на местном уровне.У нас есть менеджер хранилища Nexus.Итак, я ожидал, что проект, использующий библиотеку commons-module1-core, может просто объявить приведенный выше фрагмент зависимости в их pom и через транзитивное разрешение зависимостей получить родительские poms.

Я что-то здесь упустил?

РЕДАКТИРОВАТЬ

Для более простого варианта использования, который, на мой взгляд, похож на мою проблему - см. Этот вопрос без ответа:

Ребенок не найденродительский пом в плоской структурированной мультимодульной сборке maven

1 Ответ

0 голосов
/ 17 августа 2011

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

<parent>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-module1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>   

<groupId>com.abc.def</groupId>
<artifactId>commons-module1-core</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>

Но вы должны сделать это следующим образом:

<parent>
    <groupId>com.abc.def</groupId>
    <artifactId>commons-module1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>   

<artifactId>commons-module1-core</artifactId>
<packaging>jar</packaging>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...