Проблема мультимодульной зависимости Maven - PullRequest
0 голосов
/ 20 февраля 2019

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

Родитель:

<groupId>com.maven.showcase</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<modules>
    <module>main.module.1</module>
    <module>main.module.2</module>
</modules>

<properties>
    <main.module.1.version>1.1.1-SNAPSHOT</main.module.1.version>
    <main.module.2.version>2.2.2-SNAPSHOT</main.module.2.version>
</properties>

Здесь определены версии двух основных модулей.Версия каждого основного модуля и всех подмодулей в этом модуле одинакова.Для этого у меня есть свойство $ {revision}.

Основная помпа 1:

<parent>
    <artifactId>parent</artifactId>
    <groupId>com.maven.showcase</groupId>
    <version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>main.module.1</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>

<properties>
    <revision>${main.module.1.version}</revision>
</properties>

<modules>
    <module>sub.module.1</module>
</modules>

Основная помпа 2:

<parent>
    <artifactId>parent</artifactId>
    <groupId>com.maven.showcase</groupId>
    <version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>main.module.2</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>

<properties>
    <revision>${main.module.2.version}</revision>
</properties>

<modules>
    <module>sub.module.2</module>
</modules>

Каждый модуль содержит один подмодуль.

Подмодуль 1:

<parent>
    <artifactId>main.module.1</artifactId>
    <groupId>com.maven.showcase</groupId>
    <version>${revision}</version>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>

<artifactId>sub.module.1</artifactId>

Подмодуль 2:

<parent>
    <artifactId>main.module.2</artifactId>
    <groupId>com.maven.showcase</groupId>
    <version>${revision}</version>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>

<artifactId>sub.module.2</artifactId>

<dependencies>
    <dependency>
        <artifactId>sub.module.1</artifactId>
        <groupId>com.maven.showcase</groupId>
        <version>${main.module.1.version}</version>
    </dependency>
</dependencies>

Как видите, подмодуль 2 ссылается на подмодуль 1 как на зависимость.Это тот, который определен в главной помпе.Это хорошо работает, когда я строю весь проект.Однако при попытке построить подмодуль 2 возникает проблема:

[ОШИБКА] Не удалось выполнить цель для проекта sub.module.2: Не удалось разрешить зависимости для проекта com.maven.showcase:sub.module.2: jar: 2.2.2-SNAPSHOT: не удалось собрать зависимости в com.maven.showcase: sub.module.1: jar: 1.1.1-SNAPSHOT: не удалось прочитать дескриптор артефакта для com.maven.showcase: sub.module.1: jar: 1.1.1-SNAPSHOT: Не удалось найти артефакт com.maven.showcase: main.module.1: pom: $ {revision} в центре (https://repo.maven.apache.org/maven2) -> [Помощь1]

Я могу полностью понять, почему это происходит, поскольку, когда я собираю только субмодуль 2, pom основного модуля фактически никогда не анализируется, поэтому maven не будет знать, что поместить вместо "revision".

Вопрос: есть ли лучший способ решения этой проблемы? Я не могу заставить работать глобальные свойства, поскольку я постоянно получаю «Свойства запрещены в определении родительского pom», если я пытаюсь использовать свойстваЯ определил в родительском пом. (Maven 3.5.3)

Мне нужно иметь возможность создавать отдельные подмодули по разным причинам, например, чтобы получить дерево зависимостей maven.

Спасибо, PeTer

1 Ответ

0 голосов
/ 20 февраля 2019

НЕ используйте заполнители для номеров версий!Версия является ключевой для maven и не должна быть абстрактной.

Пожалуйста, проверьте плагин "mvn version: set".Это поможет вам в случае, если вам нужно изменить номера версий.Он автоматически изменит его во всех необходимых местах.Вы не должны больше чувствовать потребность в заполнителях с этим.;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...