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であるかどうかにかかわらず、任意の式をversion要素に使用した場合に一般的に警告されるケースなのでしょうか?
モジュールのバージョンを親のバージョンに結びつけることの本当の問題点を知りたいのですが、もしあるとすれば、それは何でしょうか?それとも、project.parent.versionであるかどうかに関わらず、任意の式をversion要素に使用した場合に一般的に警告されるケースなのでしょうか?
まあ、それは簡単にテストすることができます。気になったので、以下のpomを使ってやってみました。
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>parent</artifactId>
<groupId>com.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.mycompany</groupId>
<artifactId>module</artifactId>
<version>${myversion}</version>
<name>module</name>
<url>http://maven.apache.org</url>
<properties>
<myversion>1.0-SNAPSHOT</myversion>
</properties>
...
</project>
そして、mavenは確かに文句を言っています。
[WARNING] 'version' contains an expression but should be a constant. @ com.mycompany:module:${myversion}, /home/pascal/Projects/maven-maven3-testcase/module/pom.xml
正直なところ、私はここでmavenが正しいと思います。<version>
要素にプロパティを使用することはあまり意味がなく(少なくともproject.versionにはない)、mavenがそれについて文句を言ってくれるのはいいことです。
また、サブモジュールで親pomのバージョンを使いたい場合は、子pomから <version>
タグを削除するだけです、それらは親からバージョンを引き継ぎます。現在、あなたが行っていることは不要です。