2012-04-26 12 views
6

POMを編集せずにバージョン番号を変更する方法はありますか?Maven POMのバージョンをコマンドラインから設定する方法はありますか?

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

私たちはナイトリービルドリリースしたいCIシステムを持っていますが、Mavenのの-SNAPSHOT溶液を使用せずに、その1.0.0は現在のバージョンであれば、私たちはCI-NIGHTLY-BIULD-20120426を持っていると思います。

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

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

+1

問題が-SNAPSHOTが一意でない場合は、Nexusの最新バージョンが自動的にリリースのタイムスタンプを取得し、スナップショットをインストールしますネイキッドネーム。 –

+0

このような目的のためにSNAPSHOTを使用しないのはなぜでしょうか。それ以外の場合、リリースを使用しない理由(mvnリリース:... via CI)..? – khmarbaise

+0

私は多くの情報を隠していたかもしれないし、段階的なCIも持っているので、夜間だけでなく、いくつかの要件が満たされているので、バージョンを1.0.0から1.0.0-STABLEに変更する必要があります。それらを分離するには '1.0.0-NIGHTLY'を使います。 – codevour

答えて

6

クラシファイアを使用することをお勧めします。

分類器:あなたは時折座標 上の5番目の要素を見つけることができ、それは分類器である

<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は documentation分類器について述べています。後で分類器 にアクセスしますが、今のところそれらの種類のプロジェクト がgroupId:artifactId:packaging:classifier:versionとして表示されることを知っていれば十分です。

分類子は 同じPOMから構築されたが、それらの内容が異なったアーティファクトを区別することを可能にします。いくつかのオプションがあり、 バージョン番号の直後に、アーティファクト名 のアーティファクト名に、存在する場合は任意の文字列が追加されます。この要素のモチベーションとして、 は、たとえばJRE 1.5をターゲットとするアーティファクトを提供するプロジェクトを検討しますが、同時にJRE 1.4をサポートするアーティファクトも同時に考慮します。最初の成果物には、クライアントがどちらを使用するかを選ぶことができるように、jdk15と第二のものを装備することができます(jdk15と )。

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

+0

それは素晴らしいアイデアです。普通のビルドの場合にクラシファイアを空白にしておくことができるかどうかはわかりませんが? –

+0

はい、クラシファイアを空白のままにすることができます – amra

-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 

を使用して、コマンドラインからバージョン番号を駆動でき、Mavenの3は、それを思いとどまら。

+0

ありがとうございますが、これは近い将来廃止される予定です。 – codevour

+1

確かに。だから私は免責を置くのです。 –

+0

これは動作しません、あなたはバージョンにプロパティ識別子を渡すことはできません、Mavenは不平を言います。 – Bitmap

1

私は非常にアクセルフォンテーヌでMaven Releases on Steroidspart 2part 3)を読んでお勧めします。それは素晴らしく、私はそれを使ってとても幸せです。

あなたの質問にどう対処するかだけでなく、ビルドバージョンをCIサーバーと結びつける方法についての良いアドバイスも含まれています。ここで一言で言えば

は、主なポイントです:Mavenのリリースが遅い

  1. 、ローカルは、getを構築

    <version>${VERSION_NUMBER}</version> 
    ... 
    <properties> 
    ... 
        <VERSION_NUMBER>1.0-SNAPSHOT</VERSION_NUMBER> 
    ... 
    </properties> 
    
  2. のようなプロジェクトのバージョンをparametarize速く
  3. を行う必要がありますそのバージョン:1.0-SNAPSHOT

  4. リリースビルドが行われますからのみあなたは

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

を使用し、あなたのジェンキンス/ハドソンプロジェクトの構成では、あなたのCIサーバー

  • あなたは各ジェンキンスと新しいリリースだけでなく、毎晩、ビルドを得るその方法。


    あなたは

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

    を使用すると、あなたは私があなたにもversions Mavenプラグインを使用することができると思い1.0.0-CI-NIGHTLY-BIULD-2012-04-26_12-20-24

  • +0

    素晴らしい!非常に便利 ! – Chucky

    2

    のようなバージョンになるだろう設定を変更することができます。私はそれがこのようなものには非常に有用だとわかります。

    あなたは2つの段階でそれを行うことができます:

    1. 設定に必要なバージョン:mvn versions:set -DnewVersion=CI-NIGHTLY-BIULD-20120426
    2. デプロイ:あなたは、変更を戻す(マークが示すように)mvn versions:revertを使用する必要がある場合はmvn deploy
    +1

    POMを元の状態に戻すステップ3を追加することができます。 "mvn versions:revert" –

    +1

    @ MarkO'Connorそうです、このディテールを含めるように答えを編集しました。 –

    関連する問題