W projektach wielomodułowych maven, w których chcę, aby każdy z modułów zawsze zachowywał tę samą wersję co rodzic, zwykle robiłem coś takiego w pom.xml modułu:
<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>
Odkąd zacząłem używać maven 3.0-alpha-5, otrzymuję następujące ostrzeżenie.
[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]
Jestem ciekawy, jaki jest prawdziwy problem z wiązaniem wersji modułu z wersją nadrzędną, jeśli w ogóle? Czy jest to przypadek ogólnego ostrzeżenia, gdy dowolne wyrażenie, niezależnie od tego, czy jest to project.parent.version, jest używane w elemencie version.
Mogę się tu spóźnić, żeby o tym porozmawiać. Mam na to proste rozwiązanie
WARNING
.Przede wszystkim, jeśli chcesz, aby wszystkie moduły potomne miały tę samą wersję co rodzic, po prostu usuwasz
<version>
tag z podrzędnego POM i, gdy<parent>
dołączasz do podrzędnego POM, to powinno tam być.W przypadku braku
<version>
w dziecku POM, automatycznie przejmie Parent POMversion
.Teraz, jeśli chcesz użyć
property
w nadrzędnej wersji POM i chcesz uzyskać to samo we wszystkich modułach podrzędnych, możesz wykonać następujące czynności.Nie ma ograniczeń co do korzystania z własności w
<version>
części POM rodzica lub dziecka. Ale jeśli użyjesz własnego tagu xml do określenia tego lub użyjesz własnej właściwości, wtedyWARNING
pojawi się (chociaż jest to tylko ostrzeżenie, wszystko działa zgodnie z oczekiwaniami).Ale jeśli chcesz się tego pozbyć
WARNING
, możesz wykonać następujące kroki:Utwórz
<properties>
wewnątrz POM.xml, jak poniżej<properties> <revision>1.0.0</revision> <!-- Put your version --> </properties>
W
<version>
POM.xml umieść jak następuje<version>${revision}</version>
Przykładowy fragment kodu (dla projektu wielomodułowego):
<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>
Uwaga : zamiast tego
<revision>
, jeśli użyjesz innego imienia (na przykład<my.version>
), staniesz przed tymWARNING
Teraz, jeśli chcesz przekazać wersję w trakcie
mvn deploy
, możesz użyćmvn deploy "-Drevision=1.0.0-SNAPSHOT"
i podobnie domvn install
również.Teraz, jeśli powyższa konfiguracja, chcesz użyć jako nadrzędnego POM i chcesz użyć tego samego
version
we wszystkich modułach potomnych, to również można to zrobić. W każdym przypadkuchild module POM
użyj poniżej<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>
W celach informacyjnych możesz przejść przez konfigurację wielu modułów Maven
źródło