9

プロジェクトのSNAPSHOT依存関係に依存しながら、ハーメチックビルドを実現できる方法を作成しようとしています。

例として、次のような依存関係構造を持つプロジェクトがあるとします。

             ┌ other-1.2-SNAPSHOT
mine-1.2.3 ──┤
             └ thing-3.1-SNAPSHOT ── gizmo-6.1.3-SNAPSHOT

私がやりたいのは、すべてのSNAPSHOT依存関係をローカルで現在のバージョンに関連するものに解決し、それらをリリースとしてNexusのリリースリポジトリにデプロイすることです。これらの依存関係のすべてが内部にあるわけではないので、それぞれを単純にリリースすることはできません。

したがって、この例でother-1.2-SNAPSHOTは、はのようother-1.2-mine-1.2.3になり、thing-3.1-SNAPSHOTになりthing-3.1-mine-1.2.3ます。これは、Pythonの約60行では比較的簡単です。

ただし、問題は、推移的なSNAPSHOTを具体的なバージョンに解決することです。だから私もそれに変換gizmo-6.1.3-SNAPSHOTgizmo-6.1.3-mine.1.2.3thing-3.1-mine-1.2.3それに依存する必要があります。

これは、私が望むことを達成するための1つの方法のほんの一例です。目標は、1、2年後に、バージョン1.2.3のリリースブランチをチェックアウトして、mvn clean package古くからのSNAPSHOTの依存関係を解決することを心配せずに実行できるようにすることです。

このブランチはコンパイル可能でありjar-and-dependencies、アセンブリプラグインの機能などを使用してすべての依存関係を保持するだけではないことが重要です。ソースファイルを変更して、別のリリースビルドを作成できるようにしたいと考えています(たとえば、修正プログラムを適用する)。

それで、

  • SNAPSHOTの依存関係を再帰的に具体的に変換できるこのようなものはありますか?
  • この種のものを管理するプラグインはありますか?リリースプラグインは、そのbranch目標にいくつかの構成オプションを約束していましたが、私が望む程度に外部の深さを解決しません。
  • ハーメチックMavenビルドを作成するために利用できる他の手法はありますか?
4

2 に答える 2

2

これは広く使用されている手法ではありませんが、このブログ投稿で説明されているように、プロジェクトへの特定のSNAPSHOT依存関係を「プロジェクト」リポジトリとしていつでも確認できます。MavenはAntに対して、NailGunはHammerに対してです。

つまり、依存関係プラグインを使用して、プロジェクトディレクトリにリポジトリを作成します。以下は、リンクされたブログ投稿(読む必要があります)からコピーされたものです。

1)実行mvn -Dmdep.useRepositoryLayout=true -Dmdep.copyPom=true dependency:copy-dependencies

「これにより、すべてのプロジェクトの依存関係のリポジトリのようなレイアウトで/ target/dependenciesが作成されます」

target/dependencies/2)次のようなものにコピーしますlibs/

3)次のようなリポジトリ宣言をPOMに追加します。

<repositories>
  <repository>
    <releases />
    <id>snapshots-I-need-forever</id>
    <name>snapshots-I-need-forever</name>
    <url>file:///${basedir}/libs</url>
  </repository>
</repositories>

これをビルド/リリースプロセスの自動化された部分にします。ステップ1は、依存関係プラグインをライフサイクルフェーズフェーズに構成し、ステップ2は、AntRunプラグインを使用して、ダウンロードした依存関係を適切な場所に移動します。

これがあなたのために働くことを願っています。私は今シャワーを浴びに行かなければなりません...

于 2012-10-19T18:08:33.333 に答える
2

Maven バージョンのプラグインは、必要なことのほとんどを実行します。

http://mojo.codehaus.org/versions-maven-plugin/

ただし、ほとんどの場合、すべての依存関係を解決し、それに応じて pom ファイルを更新するビルド前のステップで実行する必要があります。次に、(pom を再読み込みする) maven を再実行して、実際のビルドを実行します。別の目標でトリガーされた pom 自体内のすべてを構成して、別のスクリプトを回避できる場合があります。

これは、SNAPSHOT 依存関係の代わりに特定のバージョンを使用し、必要に応じてビルド前のステップでそれらをアップグレードできる場合にうまく機能します。依存関係解決の唯一の実際の違いは、maven は常に -SNAPSHOT 依存関係を再ダウンロードするのに対し、新しいバージョンが利用可能な場合は通常の依存関係のみをダウンロードすることです。ただし、多くのプラグイン (バージョン プラグインを含む) は -SNAPSHOT 依存関係を異なる方法で扱い、問題を引き起こします。すべての CI ビルドには新しいバージョン番号があるため、私は -SNAPSHOT を使用することはありません。開発者のローカル ビルドなどの動作が予測しやすい -DEV などの別のタグを使用します。

私はこれに似たようなことをmavenにさせるのに多くの時間を費やしました。私が知っているほとんどの Maven プロジェクトには、バージョン番号を設定したり、このような他の制限を回避したりするために、何らかのビルド前のステップがあります。通常、maven は pom を 1 回しか読み取らず、いくつかの場所で文字列置換が機能せず、展開/インストールされた pom には文字列置換または行われた変更の結果が含まれていないため、これらすべてを 1 つのステップで実行しようとすると通常失敗します。ビルド中。

于 2012-10-19T11:30:52.393 に答える