Наследование версии проекта Maven - нужно ли указывать родительскую версию?
у меня есть два проекта: Родительский проект: A, подпроект: B
A / pom.XML-код:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
и в Б / пом.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 унаследовал версию от родителя, поэтому единственное место в моем случае мне нужно поставить 0.1-SNAPSHOT и A/pom.xml. Но если я удалю <version>0.1-SNAPSHOT</version> С B/pom.xml в Родительском разделе maven жалуется на отсутствующую версию для родителя.
есть ли способ я могу просто использовать ${project.version} или что-то подобное избегайте иметь 01.-SNAPSHOT в обоих poms?
7 ответов:
нет, нет. Всегда надо указывать версию родителей. К счастью, он наследуется как версия модуля, что желательно в большинстве случаев. Кроме того, объявление версии этого родителя автоматически натыкается на плагин Maven Release, поэтому - на самом деле - это не проблема, что у вас есть версия в 2 местах, пока вы используете плагин Maven Release для выпуска или просто натыкаетесь на версии.
обратите внимание, что есть некоторые случаи, когда это поведение на самом деле довольно хорошо и дает больше гибкости вам может понадобиться. Иногда вы хотите использовать некоторые из предыдущих родительских версий для наследования, однако это не основной случай.
Maven не предназначен для такой работы, но для достижения этой цели существует обходной путь (возможно, с побочными эффектами вам придется попробовать). Хитрость заключается в том, чтобы сказать дочернему проекту, чтобы найти своего родителя через его относительный путь вместо его чистых координат maven и в дополнение к экстернализации номера версии в свойстве:
родитель пом
<groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>${global.version}</version> <packaging>pom</packaging> <properties> <!-- Unique entry point for version number management --> <global.version>0.1-SNAPSHOT</global.version> </properties>ребенок пом
<parent> <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>${global.version}</version> <relativePath>..</relativePath> </parent> <groupId>com.dummy.bla.sub</groupId> <artifactId>kid</artifactId>я использовал этот трюк на некоторое время для одного из моих проект, без особых проблем, за исключением того, что maven регистрирует много предупреждений в начале сборки, что не очень элегантно.
EDIT
Кажется, maven 3.0.4 больше не позволяет такую конфигурацию.
самый простой способ обновить версии IMO:
$ mvn versions:set -DgenerateBackupPoms=false(сделайте это в корневой/родительской папке pom).
ваши POMs анализируются, и вас спрашивают, какую версию установить.
вы также можете использовать:
$ mvn release:update-versions -DdevelopmentVersion={version}обновить номер версии в вашем англичане.
как упоминал Янфли, есть способ обойти это.
В Maven 3.5.0 вы можете использовать следующий способ передачи версии вниз из родительского проекта:
родитель пом.xml
<project ...> <modelVersion>4.0.0</modelVersion> <groupId>com.mydomain</groupId> <artifactId>myprojectparent</artifactId> <packaging>pom</packaging> <version>${myversion}</version> <name>MyProjectParent</name> <properties> <myversion>0.1-SNAPSHOT</myversion> </properties> <modules> <module>modulefolder</module> </modules> ... </project>модуль POM.xml
<project ...> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.mydomain</groupId> <artifactId>myprojectmodule</artifactId> <version>${myversion}</version> <!-- This still needs to be set, but you can use properties from parent --> </parent> <groupId>se.car_o_liner</groupId> <artifactId>vinno</artifactId> <packaging>war</packaging> <name>Vinno</name> <!-- Note that there's no version specified; it's inherited from parent --> ... </project>вы можете изменить
myversionк тому, что вы хотите, что не является зарезервированным свойством.
С Maven 3.5.0 вы можете использовать
${revision}местозаполнитель для этого. Использование задокументировано здесь: Maven CI дружественные версии.короче родитель пом выглядит так (цитируется из документации Apache):
<project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache</groupId> <artifactId>apache</artifactId> <version>18</version> </parent> <groupId>org.apache.maven.ci</groupId> <artifactId>ci-parent</artifactId> <name>First CI Friendly</name> <version>${revision}</version> ... <properties> <revision>1.0.0-SNAPSHOT</revision> </properties> <modules> <module>child1</module> .. </modules> </project>и ребенок пом вот так
<project> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.maven.ci</groupId> <artifactId>ci-parent</artifactId> <version>${revision}</version> </parent> <groupId>org.apache.maven.ci</groupId> <artifactId>ci-child</artifactId> ... </project>вы обязательно использовать Сгладить Плагин Maven для создания документов pom с выделенным номером версии, включенным для развертывание. Инструкции описаны в связанной документации.
также @khmarbaise написал хороший пост blob об этой функции:Maven: Pom файлы без версии в нем?
eFoxответ работал для одного проекта, но не тогда, когда я ссылался на модуль из другого (pom.xml все еще хранились в моем
.m2со свойством вместо версии).однако, это работает, если вы объедините его с
flatten-maven-plugin, так как он генерирует poms с правильной версией, а не свойство.единственный вариант, который я изменил в плагине определение
outputDirectory, она пуста по умолчанию, но я предпочитаю иметь его вtarget, который установлен в моем.gitignoreконфигурация:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>flatten-maven-plugin</artifactId> <version>1.0.1</version> <configuration> <updatePomFile>true</updatePomFile> <outputDirectory>target</outputDirectory> </configuration> <executions> <execution> <id>flatten</id> <phase>process-resources</phase> <goals> <goal>flatten</goal> </goals> </execution> </executions> </plugin>конфигурация плагина входит в родитель пом.xml
Comments