mavenのサードパーティのスナップショットプロジェクトに依存するプロジェクトをリリースする方法
-
05-07-2019 - |
質問
iは、mavenリリースプラグインを使用してスナップショットプロジェクト「foo-1.0-SNAPSHOT」をリリースしたいと考えています。このプロジェクトは、まだリリースされていないサードパーティのモジュール「bar-1.0-SNAPSHOT」に依存しています。 私のプロジェクトのpom.xmlでオプション 'allowTimestampedSnapshots'を使用して、タイムスタンプ付きスナップショットを許可しますが、mavenが未解決の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 これについてしばらく前にブログ。
jarを所有するpomでインストールするだけです。通常、これが公式バージョンではないことを明確にするためにグループとアーティファクトIDを変更しますが、一般的にはこれが問題に対する最善の回避策です。