Модули Maven с переменной в качестве номера версии - PullRequest
0 голосов
/ 07 декабря 2018

Я получил проект Maven со следующей структурой:

Модуль A (родительский), Подмодуль B и Подмодуль C

В родительском pom.xml я использую переменную для настройки параметровверсия всех проектов:

...
    <version>${revision}</version>
...
    <properties>
        <revision>1.1</revision>
    </properties>
...
    <modules>
        <module>moduleB</module>
        <module>moduleC</module>
    </modules>
</project>

Модуль C - это мой дистрибутив, который использует плагин shade для упаковки всего в одну банку.

В подмодулях я устанавливаю родителя следующим образом:

<parent>
    <groupId>group</groupId>
    <artifactId>moduleA</artifactId>
    <version>${revision}</version>
</parent>

Теперь я хочу использовать модуль C в другом проекте, однако при этом я получаю только следующую ошибку:

Не удалось выполнить цель для проекта newProject: Не удалось разрешить зависимости для проектаgroup: newProject: jar: 0.0.1-SNAPSHOT: не удалось собрать зависимости в группе: moduleC: jar: 1.1: не удалось прочитать дескриптор артефакта для группы: moduleC: jar: 1.1: не удалось найти группу артефактов: родительский: pom: ${revision} в нексусе (NEXUS_URL)

Я предполагаю, что проблема заключается в том, что значение переменной не заполняется при обращении к модулю C как к зависимости.Как я могу решить эту проблему?Я уже пытался очистить проект перед сборкой и безуспешно обновлять все артефакты.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Благодаря комментарию hadu.mansouri я смог это исправить.Я использовал flatten-maven-plugin для выравнивания файлов pom.xml.Тем не менее, похоже, что есть проблема с плагином Shade, так как затененный модуль был единственным модулем, где он не работал.Таким образом, в выпущенном модуле затенения пом было сказано:

<version>${revision}</version>

для ссылки на родителя.Я использовал подход статьи, ссылка на которую содержится в комментарии.Там было использовано это расширение: https://github.com/jcgay/unique-revision-maven-filtering

Используя его вместо flatten-maven-plugin, Maven правильно строит многомодульный проект со свойством одной версии, и я также могу использовать затененный модуль в другомпроекты правильно.

0 голосов
/ 07 декабря 2018

Maven ожидает, что все модули имеют жесткую версию.

Чтобы избежать редактирования большого количества помп, используйте плагин версий, например:

mvn versions:set -DnewVersion=1.0.1

Если вы запускаете указанную выше команду наparent это исправит все дочерние poms.

См. здесь для документации.

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