В многомодульных проектах maven, где я хочу, чтобы каждый из модулей всегда сохранял ту же версию, что и родительский, я обычно делал что-то вроде следующего в модуле pom.xml:
<parent>
<groupId>com.groupId</groupId>
<artifactId>parentArtifactId</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<groupId>com.groupId</groupId>
<artifactId>artifactId</artifactId>
<packaging>jar</packaging>
<version>${project.parent.version}</version>
<name>name</name>
Поскольку я начал использовать maven 3.0-alpha-5, я получаю следующее предупреждение.
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.groupid.artifactId:name:jar:1.1-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.groupid.artifactId:name::${project.parent.version}, /Users/whaley/path/to/project/child/pom.xml
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
Мне любопытно узнать, в чем настоящая проблема с привязкой версии модуля к родительской версии, если таковая имеется? Или это случай общего предупреждения, когда любое выражение, независимо от того, является ли оно project.parent.version, используется для элемента версии.
Я мог бы опоздать сюда, чтобы обсудить это. У меня для этого есть простое решение
WARNING
.Прежде всего, если вы хотите, чтобы все дочерние модули принимали ту же версию, что и родительские, вы просто удаляете
<version>
тег из дочернего POM и, когда вы включаете<parent>
дочерний POM, он должен быть там.При отсутствии
<version>
дочернего POM он автоматически принимает родительский POMversion
.Теперь, если вы хотите использовать
property
родительскую версию POM и хотите получить то же самое во всех дочерних модулях, вы можете выполнить следующие действия.Нет ограничений на использование свойства в
<version>
родительском или дочернем POM. Но если вы используете свой собственный тег xml для указания этого или используете собственное свойство, тогдаWARNING
приходит (хотя это всего лишь предупреждение, все работает, как ожидалось).Но если вы хотите избавиться от этого
WARNING
, вы можете выполнить следующие действия:Создайте
<properties>
внутри POM.xml, как показано ниже<properties> <revision>1.0.0</revision> <!-- Put your version --> </properties>
В
<version>
POM.xml введите следующее<version>${revision}</version>
Пример фрагмента кода (для многомодульного проекта):
<groupId>abc.xyz</groupId> <artifactId>pqr</artifactId> <!-- <version>1.0.0</version> --> <version>${revision}</version> <packaging>pom</packaging> <description>Parent POM</description> <properties> <revision>1.0.0</revision> </properties>
Запись : вместо того
<revision>
, чтобы использовать любое другое имя (например,<my.version>
), вы столкнетесь с этимWARNING
Теперь, если вы хотите пройти версию во время
mvn deploy
, вы можете использоватьmvn deploy "-Drevision=1.0.0-SNAPSHOT"
и аналогично дляmvn install
.Теперь, если указанная выше конфигурация, вы хотите использовать как родительский POM, и вы хотите использовать то же самое
version
во всех дочерних модулях, это также можно сделать. В каждомchild module POM
используйте ниже<parent> <groupId>abc.xyz</groupId> <artifactId>Parent</artifactId> <!-- <version>1.0.0</version> --> <version>${revision}</version> </parent> <groupId>abc.xyz</groupId> <artifactId>Child</artifactId> <!-- <version>1.0.0</version> --> <!-- Automatically inherit parent POM version --> <name>Demo</name>
Для справки вы можете пройти настройку нескольких модулей maven
источник