1. ホーム
  2. maven

[解決済み] Maven 3 でモジュールのバージョンとして project.parent.version を使用する際の警告

2023-06-15 17:19:32

質問

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のバージョンを使用したい場合。 を削除するだけです。 <version> タグを削除してください。 を削除すれば、親からバージョンを引き継ぎます。現在行っていることは不要です。