7

POMを編集せずにバージョン番号を変更する方法はありますか?

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0</version>

ナイトリービルドをリリースしたいCIシステムがありますが-SNAPSHOT 、Mavenのソリューションを使用せずに、が1.0.0現在のバージョンである場合は、が必要CI-NIGHTLY-BIULD-20120426です。

私はこれがのようなもので可能であると提案しましmvn deploy -Dversion=CI-NIGHTLY-BIULD-20120426たが、明らかにそうではありません。pom.xml悪い解決策は、CIサーバーに毎回編集させることですが、これは非常に不便だと思います。

ありがとうございました!

4

4 に答える 4

7

分類器を使用することをお勧めします。

<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>

<properties>
    <!-- default classifier is empty -->
    <my.project.classifier></my.project.classifier>
</properties>

<build>
...
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <classifier>${my.project.classifier}</classifier>
    </configuration>
    <executions>...</executions>
  </plugin>
</plugins>
</build>

mvn package -Dmy.project.classifier=NIGHTLY-2012-04-26_02-30

Mavenのドキュメントには分類子について書かれています:

分類子:座標上に5番目の要素が見つかることがあります。これが、分類子です。後で分類子にアクセスしますが、今のところ、これらの種類のプロジェクトがgroupId:artifactId:packaging:classifier:versionとして表示されていることを知っていれば十分です。

分類子を使用すると、同じPOMから作成されたものの、内容が異なるアーティファクトを区別できます。アーティファクト名のバージョン番号の直後に(存在する場合)追加されるのは、オプションの任意の文字列です。この要素の動機として、たとえば、JRE 1.5を対象とするアーティファクトを提供すると同時に、JRE1.4を引き続きサポートするアーティファクトを提供するプロジェクトについて考えてみます。最初のアーティファクトには分類子jdk15を装備し、2番目のアーティファクトにはjdk14を装備して、クライアントがどちらを使用するかを選択できるようにすることができます。

分類子のもう1つの一般的な使用例は、プロジェクトのメインアーティファクトにセカンダリアーティファクトをアタッチする必要があることです。Maven中央リポジトリを参照すると、分類子のソースとjavadocが、パッケージ化されたクラスファイルとともにプロジェクトのソースコードとAPIドキュメントをデプロイするために使用されていることがわかります。

于 2012-04-26T10:24:20.723 に答える
2

バージョンmavenプラグインも使用できると思います。このようなことにはとても便利だと思います。

あなたは2つのステップでそれを行うことができます:

  1. 必要なバージョンを設定します。mvn versions:set -DnewVersion=CI-NIGHTLY-BIULD-20120426
  2. 配備:mvn deploy
  3. 変更を元に戻す必要がある場合は、mvn versions:revert(マークが示唆するように)を使用します
于 2012-04-26T19:09:36.730 に答える
1

Axel FontaineによるステロイドのMavenリリースパート2パート3 )を読むことを強くお勧めします。それは素晴らしいです、そして私はそれを使ってとても幸せです。

それはあなたがあなたが求めることをどのように行うかを詳述するだけでなく、あなたのビルドバージョンをあなたのCIサーバーとどのように結びつけることができるかについての良いアドバイスも含みます。

一言で言えば、ここに主なポイントがあります:

  1. Mavenのリリースは遅いので、もっと速くする必要があります
  2. プロジェクトのバージョンを次のようにパラメータ化します

    <version>${VERSION_NUMBER}</version>
    ...
    <properties>
    ...
        <VERSION_NUMBER>1.0-SNAPSHOT</VERSION_NUMBER>
    ...
    </properties>
    
  3. ローカルビルドはそのバージョンを取得します:1.0-SNAPSHOT
  4. リリースビルドは、CIサーバーからのみ実行されます
  5. Jenkins/Hudsonプロジェクト構成で使用する

    clean deploy scm:tag -DVERSION_NUMBER=${BUILD_NUMBER}
    

そうすれば、毎晩だけでなく、Jenkinsのビルドごとに新しいリリースを取得できます。


使用する構成を変更できます

clean deploy scm:tag -DVERSION_NUMBER=1.0.0-CI-NIGHTLY-BIULD-${BUILD_ID}

そして、あなたは次のようなバージョンを取得します1.0.0-CI-NIGHTLY-BIULD-2012-04-26_12-20-24

于 2012-04-26T11:36:43.770 に答える
-1

バージョン番号を次のようにパラメータ化できます

<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>${my.project.version}</version>

<properties>
    <my.project.version>1.0</my.project.version>
</properties>

を使用してコマンドラインからバージョン番号を駆動します

mvn package -Dmy.project.version=NIGHTLY

これは可能ですが、Maven3はそれを推奨しません。

于 2012-04-26T10:04:03.037 に答える