現在、複数の Maven プロジェクトにわたってリファクタリングを実行するための適切なワークフローを見つけようとしていますが、満足のいく解決策が見つかりません。
3 つのプロジェクトがあるとします。1 つのプロジェクトはcommonと呼ばれ、2 つの依存プロジェクトはapp1とapp2と呼ばれます。それぞれ別の Git リポジトリにあります。
ここで、StringUtils.trim() という一般的なメソッドの名前を StringUtils.getTrimed() に変更するとします。このメソッドはapp1とapp2で使用されるため、これらのプロジェクトも調整する必要があります。
ここで問題は、この変更を開発チームに提供するための正しいワークフローは何かということです。この状況を考えると: アーティファクトをホストするための中央 SCM サーバーと中央 Maven リポジトリ サーバーを持つ約 10 人の開発者のチーム。
可能なワークフロー:
変更を SCM にコミットするだけです (3 つのプロジェクトすべてに対して) --> 問題:たとえば、 app1で作業している開発者は、プロジェクトコモンをチェックアウトしていない可能性がありますが、中央のアーティファクト サーバーからバイナリを使用しています。SCM からapp1の最新バージョンをフェッチすると、ビルドが壊れます。悪い!
1 に加えて、 app1の依存関係を変更して、 commonの SNAPSHOT バージョンを指すようにします。--> 問題: app1で作業している開発者が SCM から最新バージョンをフェッチするとき、更新ポリシーがDAILY (デフォルト) に設定されている場合、おそらくcommonの最新の SNAPSHOT を取得できません。悪い!
2 に加えて、SNAPSHOTS の更新ポリシーをALWAYSに変更します。--> 問題: これで、app1の開発者はcommonの最新の SNAPSHOT を取得し、すべて問題ありませんが、 app1への変更をコミットする前に SNAPSHOT が Artifact サーバーにデプロイされている場合のみです! さらに、アーティファクト サーバーへの共通プロジェクトのデプロイと、SCM へのapp1のコミットの間には、一定の期間があります。開発者がcommonの最新の SNAPSHOT を取得した場合、app1への変更をまだコミットしていないため、SCMのapp1の現在のバージョンと互換性がなくなります。悪い!
私が思い付くことができる唯一の実行可能な解決策は、SNAPSHOT メカニズムをスキップしてバージョンを操作することです。ワークフローは次のとおりです。
- 私のマシンで 3 つのプロジェクトをローカルに変更した後 (コミット前)、 commonのバージョンを1.0 から 1.1に上げます。
- SCM に共通にコミットし、アーティファクト サーバーにデプロイします。
- デプロイが完了した後でのみ、app1とapp2の依存関係を変更して、共通の新しいバージョンを指すようにし、app1とapp2をコミットします。
このアプローチの問題点: バージョン管理を行う必要があるため、これはチーム全体で調整し、すべての依存プロジェクトを考慮して行う必要があります。さらに、変更をapp1およびapp2にコミットする前に、共通プロジェクトが成果物サーバーにデプロイされるのを待つ必要があります。
そのようなリファクタリングを実行する方法、簡単で柔軟なメカニズムはありませんか? 誰かが私を助けてくれることを願っています。多分私の側にもいくつかの誤解があります。