2016-05-08 7 views
1

mvnコマンドを実行すると、mvn packageコマンドを実行するすべての成果物のすべてのGroupID:ArtifactID:Version(GAV)のリストが表示されます。mavenパッケージコマンドが生成するGAVのリストを取得するにはどうすればよいですか?

親モジュールpomがない単一モジュールのMavenプロジェクトでは、これは簡単です.pomの内部を見ることができます。

親pomを持つ単一モジュールMavenプロジェクトの場合は、help:effective-pomを使用でき、<version>要素があるpomファイルが表示されます。

マルチモジュールのMavenプロジェクト(リアクタ)の場合、実際に同じことをすることができます(そうは思わない、今すぐ試してみてください)。これにより、(複数の)<project>要素のファイルを解析することができます。

他に何か検討する必要がありますか?

これの全体的な目標は、下流の継続配信(http://go.cd/)ステージ/ステップ/ジョブに、どのバージョンの上流依存性を使用するべきかに関する情報を提供することです。

+0

修飾子(* -source、* -tests、* -javadocsなど)を数えれば、単一のMavenモジュールが実際に複数の成果物を生成できます。 maven jarプラグインの醜い呼び出しで、私は複数のGAVを生成することさえ可能だと確信しています。私は唯一の "安全な"方法は、 "mvn install"を実行し、ローカルrepoに入れられることを終了する参照してくださいと思う – radai

+0

maven-jar-pluginを使用する私はあなたが異なるgroupIdのjarを作成することを大いに疑問に思っています:artifactId: maven-jar-pluginは、1つのg:a:v ...を持つことができるpomによって定義されるメインプロジェクトの成果物をアタッチ/置換します。 – khmarbaise

答えて

1

一般に、ビルドが実行される前にリストを作成することはできません...問題は、pomモデルに基づいてすべての成果物が記述されているわけではないため、一部のプラグインが補足成果物(maven-assembly-テストジャーなどを経由したmaven-jar-plugin)

ビルドの実行後に生成された成果物のリストを取得することができます(インストール済み)。ビルドの最後に、このようなリストを作成し、あなたinspired me to implement an EventSpyの質問...次のようになります。私は何ができるか

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.423 s 
[INFO] Finished at: 2016-05-08T13:22:10+02:00 
[INFO] Final Memory: 24M/310M 
[INFO] ------------------------------------------------------------------------ 
[INFO] --    Maven Artifact Collector Summary      -- 
[INFO] ------------------------------------------------------------------------ 
[INFO] test.maven.plugin.profiler:parse-pom:0.1.0-SNAPSHOT:jar 
[INFO] test.maven.plugin.profiler:parse-pom:0.1.0-SNAPSHOT:pom 
[INFO] test.maven.plugin.profiler:parse-pom:0.1.0-SNAPSHOT:jar:jar-with-dependencies 

はそれを強化し、情報を含むファイルを書くことである(以上またはあらゆるフォーマットを除く)...現時点では単なるPoCです...もっと情報を提供したり、問題やPRを作成したり、何が必要かをリクエストしたりすることができます。

さらに、ダウンストリームのパーツには、リポジトリキャッシュ内の(ファイルシステム上またはリポジトリマネージャまたはドッカーデータコンテナを介して)利用可能なアーティファクトが必要です。

+0

私は自家製のMavenリポジトリ(現在Pythonで書かれています) 1つのレポは多くの両親の子供になる。 'curl http:// repo-manager/repo/child-build-step/1/run/1 -d parent =ビルドステップのチェーンの各ステップについて、ステップが始まるとRepoを作成します。 parent-build-step/1/run/2のすべての成果物をchild-build-stepの現在のビルドで使用できるようにする「parent-build-step/1/run/2' –

+0

Nexusのような既存のリポジトリマネージャを使用しないのはなぜですか? – khmarbaise

+0

"私"のソリューションでは、いつでもバージョンレスの依存関係を扱うことができ、アクセス権のあるリポジトリから最新のものを取り出すことができます。パイプラインツリー/祖先のビルドにのみアクセスできます。 ビルドステップごとに1つの "物理的な"レポと1つの "バーチャルな"レポを持つ同様のソリューションが得られるかもしれません。Nexus 2の私の経験は、単純に(エンタープライズレベル、〜200 GBまたは永久に保管する新しいアーティファクト)、私はそれ以上の時間を無駄にする理由がないと思っています。 Nexus 3には正式なMavenリポジトリのサポートは付属していません。 Artifactoryは機能しますが、APIはライセンスを購入する必要があります。 –

関連する問題