mavenリリースプラグインを使用して、スナップショットプロジェクト「foo-1.0-SNAPSHOT」をリリースしたいと思います。このプロジェクトは、まだリリースされていないサードパーティのモジュール「bar-1.0-SNAPSHOT」に依存しています。私のプロジェクトのpom.xmlでオプション 'allowTimestampedSnapshots'を使用して、タイムスタンプ付きのスナップショットを許可していますが、Mavenが未解決のSNAPSHOT依存関係についてまだ文句を言うので自分でビルドしない限り、サードパーティモジュール(バー)にタイムスタンプが付いていないと想定しています。
依存しているSNAPSHOTプロジェクトに関係なく、プロジェクトfooをリリースする方法はありますか?そうでない場合、サードパーティプロジェクトにタイムスタンプを追加するにはどうすればよいですか?
短い答えは 次の答え ...を参照してください。長い答えはあなたがそれを回避できるということです。
私が過去に対処した唯一の方法は、サードパーティのライブラリを効果的にフォークして、自分でリリースをカットすることです。もちろん、これは言うより簡単であり、ライブラリが大きく複雑な場合は非常に難しく、サードパーティライブラリがクローズドソースの場合は不可能です。サードパーティにアプローチし、リリースをカットするよう依頼することは、おそらくより簡単な方法です。
別のオプションとして、pomをコピーして(スナップショットがないことを確認して)バージョン情報を変更し、pomとアーティファクトをリポジトリに手動でインストールすることもできます。
問題はallowTimestampedSnapshots
パラメータ名にあります。それはドキュメントにありますが、プラグインのソースは式で別のパラメータ名を使用しています-ignoreSnapshots
。
したがって、-DignoreSnapshots=true
およびリリースプラグインの準備の目標は、スナップショットの依存関係を無視します。
Maven-release-pluginオプションの使用
-DignoreSnapshots=true
の代わりに
-DallowTimestampedSnapshots=true
私の場合、これは助けになり、スナップショットのバージョンとの依存関係を使用してリリースを準備して実行することができます。
スナップショットの依存関係が更新された場合、リリースでスナップショットバージョンを使用すると、後でリリースが壊れる可能性があるため、このオプションは非常に慎重に処理する必要があります。
前の回答では、グループとアーティファクトIDを変更することを提案しました...後でこの依存関係が解放され、クラスパスに2つのコピーが存在するようになると、Mavenが同じアーティファクトとして認識しないため、これを行わないでください。私が好む方法は、バージョンのみを変更することです。[元のバージョン]-[私の組織名]-[プルしたsvnバージョン]のようにして、1.0-SONATYPE-3425のようなものを取得します。 svn revを使用することで、常にソースを再度プルし、必要に応じてパッチを適用し、ソース全体を自分のsvnにプルすることなく、使用しているものを正確に知ることができます。
更新-I blogged これについてしばらく前に。