Как сделать так, чтобы дочерний проект Maven имел версию, отличную от родительской?

Я очень новичок в Maven, и я создаю родительский и дочерний проект Maven. Я хочу, чтобы версия дочернего проекта отличалась от версии родительского, но если я изменю версию, то получу ошибку Cannot resolve для некоторых зависимостей.

Как я могу иметь родительскую версию, отличную от дочерней версии?

Ниже приведены текущие свойства, которые у меня есть, и они работают довольно хорошо:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>io.parent-test</groupId>
    <artifactId>io.parent-test</artifactId>
    <version>0.9.1-SNAPSHOT</version>
    <relativePath></relativePath>
</parent>

<artifactId>test-project-converter</artifactId>
<name>test-project</name>
<description>Test Project</description>

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


<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>io.parent-test</groupId>
    <artifactId>io.parent-test</artifactId>
    <version>0.9.1-SNAPSHOT</version>
    <relativePath></relativePath>
</parent>

<version>0.9.2-SNAPSHOT</version>
<artifactId>test-project-converter</artifactId>
<name>test-project</name>
<description>Test Project</description>

У меня есть следующие зависимости, основанные на версии, которая выдает ошибку:

<dependency>
    <groupId>io.parent-dep</groupId>
    <artifactId>parent-dev</artifactId>
    <version>${project.version}</version>
</dependency>

Я попытался просмотреть некоторые ответы в Интернете и внес изменения в свой родительский проект, чтобы включить свойства:

<properties>
    <revision>0.9.2-SNAPSHOT</revision>
</properties>

и, соответственно, измените дочерний проект, чтобы включить версию <version>${revision}</version>, но она не работает должным образом.

Может кто-нибудь, пожалуйста, дайте мне знать, как я могу создать другую версию моментального снимка для моего дочернего проекта, сохраняя при этом родительский проект?

Должно сработать. Можете ли вы предоставить всего минимального родителя и дочернего элемента, которые воспроизводят вашу ошибку.

Slawomir Jaranowski 23.11.2022 19:36

Если вы хотите использовать <version>${revision}</version>, вам нужно настроить плагин flatten-maven (подробности в документах: maven.apache.org/maven-ci-friendly.html)

khmarbaise 24.11.2022 11:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
176
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, потому что вы строите неправильный порядок дочернего и родительского проекта. Когда вы меняете версию дочернего проекта, вы должны сначала перестроить дочерний проект с новой версией -> новое имя файла jar (со старым родительским файлом jar, если в дочернем проекте есть родительская зависимость), а затем обновить версию дочерней зависимости в pom родительского проекта и перестроить родительский проект, затем снова перестроить дочерний проект с новым родительским файлом jar (та же версия, но с другим дочерним файлом jar).

Ответ принят как подходящий

Я смог исправить это, предоставив родительскую версию ${project.parent.version} зависимостям, исходящим от родителя.

Я пробовал это, и все работало нормально.

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>io.parent-test</groupId>
    <artifactId>io.parent-test</artifactId>
    <version>0.9.1-SNAPSHOT</version>
    <relativePath></relativePath>
</parent>

<version>0.9.2-SNAPSHOT</version>
<artifactId>test-project-converter</artifactId>
<name>test-project</name>
<description>Test Project</description>

<dependencies>

<dependency>
    <groupId>io.parent-dep</groupId>
    <artifactId>parent-dev</artifactId>
    <version>${project.parent.version}</version>
</dependency>

</dependencies>

Другие вопросы по теме