Наследование версии проекта Maven - нужно ли указывать родительскую версию?

189

У меня есть два проекта: родительский проект: A, суб-проект: B

A / pom.xml:

<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>

И в B / pom.xml у меня есть:

    <parent>
        <groupId>com.dummy.bla</groupId>
        <artifactId>parent</artifactId>
        <version>0.1-SNAPSHOT</version>     
    </parent>

    <groupId>com.dummy.bla.sub</groupId>
    <artifactId>kid</artifactId>

Я хочу, чтобы B наследовал версию от parent, поэтому единственное место в моем случае, которое мне нужно поставить, 0.1-SNAPSHOT- это A/pom.xml. Но если я удаляю <version>0.1-SNAPSHOT</version>из- B/pom.xmlпод родительского раздела, maven жалуется на отсутствующую версию для родителя.

Есть ли способ, которым я могу просто воспользоваться, ${project.version}или что-то подобное, чтобы избежать попадания 01.-SNAPSHOTв оба насоса?

Shengjie
источник
4
Боюсь, вам придется дождаться Maven 3.1.
Восприятие
1
Ссылка выше перемещена. Окончательный статус был «Закрыт / Не исправлю
jocull

Ответы:

86

РЕДАКТИРОВАТЬ: Начиная с Maven 3.5.0 есть хорошее решение для этого с помощью ${revision}заполнителя. Смотрите ответ FrVaBe для деталей. Для предыдущих версий Maven см. Мой оригинальный ответ ниже.


Нет, нет Вы всегда должны указывать версию родителя. К счастью, это наследуется как версия модуля, что желательно в большинстве случаев. Более того, объявление версии этого родительского элемента автоматически обновляется плагином релиза Maven, поэтому, на самом деле, не проблема в том, что у вас есть версия в двух местах, если вы используете плагин релиза Maven для выпуска или просто изменения версий.

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

Михал Калиновский
источник
3
В настоящее время вы можете использовать ${revision}заполнитель для этого. Смотрите мой ответ ;-)
FrVaBe
2
Это уже устарело - проверьте ответ @ FrVaBe здесь: stackoverflow.com/a/51969067/514483
Робд
@FrVaBe, что, если у нас есть вложенные родители с разными версиями? Мы не можем использовать одно свойство $ {revision}, этого недостаточно.
Halil
@halil Вопрос в том, чтобы унаследовать версию от родителя с целью иметь одну и ту же версию в двух артефактах. Если у вас разные родители с разными версиями (в иерархии наследования), вы, вероятно, не сделаете их одинаковыми. Поэтому я не до конца понимаю комментарий.
FrVaBe