web-dev-qa-db-ja.com

プロパティを持つMavenバージョン

私は、約400個のプラグインを扱う大きなMaven(Tycho)プロジェクトを持っています。

各POMファイルでアプリケーションのバージョンを指定しました。

1つの場所でのみ、すべてのPOMのバージョンを指定する方法はありますか?

私はいくつかのように考えることを期待するでしょう:

<properties>
<buildVersion>1.1.2-SNAPSHOT</buildVersion>
</properties>

....

<version>${buildVersion}</version>

親はpom.xml

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>build.parent</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>pom</packaging>

次に、各POMには親POMへの参照があります。

<parent>
  <artifactId>build.parent</artifactId>
  <groupId>company</groupId>
  <relativePath>../build.parent/pom.xml</relativePath>
  <version>1.1.2-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>artifact</artifactId>
<version>1.1.2-SNAPSHOT</version>
<packaging>Eclipse-plugin</packaging>
39
Jan Pešta

親プロジェクトがある場合、親pomでバージョンを設定でき、子で$ {project.version}または$ {version}で兄弟ライブラリを参照できます=プロパティ。

各子で親のバージョンを繰り返すことを避けたい場合:これを行うことができます:

<modelVersion>4.0.0</modelVersion>
<groupId>company</groupId>
<artifactId>build.parent</artifactId>
<version>${my.version}</version>
<packaging>pom</packaging>

<properties>
<my.version>1.1.2-SNAPSHOT</my.version>
</properties>

そして、あなたの子供のポンであなたがしなければならない:

    <parent>
      <artifactId>build.parent</artifactId>
      <groupId>company</groupId>
      <relativePath>../build.parent/pom.xml</relativePath>
      <version>${my.version}</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>company</groupId>
    <artifactId>artifact</artifactId>
    <packaging>Eclipse-plugin</packaging>

    <dependencies>
        <dependency> 
           <groupId>company</groupId>
           <artifactId>otherartifact</artifactId>   
           <version>${my.version}</version>
or
           <version>${project.version}</version>
        </dependency>
    </dependencies>

hth

29
Frederic Close

バージョンのプロパティを使用すると、次の警告が生成されます。

[WARNING]
[WARNING] Some problems were encountered while building the effective model for xxx.yyy.sandbox:Sandbox:war:0.1.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ xxx.yyy.sandbox:Sandbox:${my.version}, C:\Users\xxx\development\gwtsandbox\pom.xml, line 8, column 14
[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]

バージョンを切り替えるために複数の場所でバージョンを変更する必要があるという問題がある場合、正しいことは、これを自動的に行うMavenリリースプラグインを使用することです。

3.5以降のMavenバージョンでは、親セクションと残りのpom内でプレースホルダー(例:$ {revision})を使用できるはずです。${project.version}

実際には、parent以外のプロジェクトプロパティを省略することもできます。これらは継承されるためです。結果は次のようになります。

<project>
    <parent>
    <artifactId>build.parent</artifactId>
    <groupId>company</groupId>
    <relativePath>../build.parent/pom.xml</relativePath>
    <version>${revision}</version>  <!-- use placeholder -->
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>artifact</artifactId>
    <!-- no 'version', no 'groupId'; inherited from parent -->
    <packaging>Eclipse-plugin</packaging>

    ...
</project>

詳細、特に公開中にプレースホルダーを解決する方法については、「 Maven CIフレンドリーバージョン|マルチモジュールセットアップ 」を参照してください。

6
Kariem

正しい答えはこれです(例のバージョン):

  • 親pom.xmlには、(not inside properties)が必要です:

    <version>0.0.1-SNAPSHOT</version>
    
  • すべての子モジュールには次のものが必要です。

    <parent>
        <groupId>com.vvirlan</groupId>
        <artifactId>grafiti</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    

そのため、ハードコーディングされています。

さて、バージョンを更新するには次のようにします:

mvn versions:set -DnewVersion=0.0.2-SNAPSHOT
mvn versions:commit # Necessary to remove the backup file pom.xml

400のモジュールすべてで親バージョンが更新されます。

6
ACV

Maven 3を使用している場合、この問題を回避する1つのオプションは、バージョンプラグインを使用することです http://www.mojohaus.org/versions-maven-plugin/

具体的には、コマンド、

mvn versions:set -DnewVersion=2.0-RELEASE
mvn versions:commit

これにより、親と子のPOMが2.0-RELEASEに更新されます。前にビルドステップとしてこれを実行できます。

リリースプラグインとは異なり、ソース管理と通信しようとはしません

2
rince

Maven-Usersフォーラムを参照してください 'version'には式が含まれていますが、定数である必要があります。新しいバージョンを追加する方法?

これが悪い計画である理由はここにあります。

デプロイされるPOMのプロパティ値は解決されないため、そのPOMに依存する人は誰でも$ {}で補間されていない文字列として依存関係を取得し、ビルドプロセスで大きな陽気が続きます。

maven 2.1.0および/または2.2.0では、解決されたプロパティでpomsをデプロイしようとしました...これは予想以上に壊れたため、これら2つのバージョンは推奨されません。2.2.1は推奨される2.xバージョンです。

0
Gerold Broser