In Maven-Projekten mit mehreren Modulen, in denen jedes Modul immer dieselbe Version wie das übergeordnete Modul behalten soll, habe ich in der pom.xml des Moduls normalerweise Folgendes ausgeführt:
<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>
Seit ich Maven 3.0-alpha-5 benutze, erhalte ich die folgende Warnung.
[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]
Ich bin gespannt, was das eigentliche Problem beim Binden der Version eines Moduls an die übergeordnete Version ist, wenn überhaupt? Oder handelt es sich um eine allgemeine Warnung, wenn ein Ausdruck, unabhängig davon, ob es sich um project.parent.version handelt, für das Versionselement verwendet wird.
Ich könnte zu spät kommen, um darüber zu diskutieren. Ich habe eine einfache Lösung dafür
WARNING
.Wenn Sie möchten, dass alle untergeordneten Module dieselbe Version wie die übergeordneten haben, entfernen Sie zunächst das
<version>
Tag aus dem untergeordneten POM, und wie Sie es<parent>
in das untergeordnete POM aufnehmen, sollte dieses vorhanden sein.In Abwesenheit von
<version>
in den Kinder POM, wird es automatisch Elternteil POM nehmenversion
.Wenn Sie nun
property
in der übergeordneten POM-Version verwenden und in allen untergeordneten Modulen dasselbe erhalten möchten, können Sie wie folgt vorgehen.Es gibt keine Einschränkung für die Verwendung von Eigenschaften in
<version>
Teilen des übergeordneten oder untergeordneten POM. Wenn Sie jedoch Ihr eigenes XML-Tag verwenden, um dies anzugeben, oder wenn Sie Ihre eigene Eigenschaft verwenden, wird diesWARNING
angezeigt (obwohl dies nur eine Warnung ist, funktioniert alles wie erwartet).Wenn Sie dies jedoch beseitigen möchten
WARNING
, können Sie die folgenden Schritte ausführen:Erstellen Sie
<properties>
in POM.xml wie folgt<properties> <revision>1.0.0</revision> <!-- Put your version --> </properties>
In
<version>
der pom.xml, setzen Sie wie folgt<version>${revision}</version>
Beispielcode-Snippet (für ein Projekt mit mehreren Modulen):
<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>
Hinweis :
<revision>
Wenn Sie stattdessen einen anderen Namen verwenden (z. B.<my.version>
), werden Sie damit konfrontiertWARNING
Wenn Sie nun die Version während übergeben möchten
mvn deploy
, können Siemvn deploy "-Drevision=1.0.0-SNAPSHOT"
und ähnlich auch für verwendenmvn install
.Wenn Sie nun über der Konfiguration stehen, möchten Sie als übergeordnetes POM verwenden und dasselbe
version
in allen untergeordneten Modulen verwenden. Dies kann auch durchgeführt werden. In jedemchild module POM
verwenden unten<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>
Als Referenz können Sie das Maven-Multi-Modul-Setup durchlaufen
quelle