6

私は最近 Maven プロジェクトをリリースしましたが、プロセス全体が非常に複雑でエラーが発生しやすいと考えずにはいられませんでした。3 つのモジュール A、B、C で構成されるアプリケーションがあり、それぞれが Subversion に独自のフォルダーを持ち、Hudson に個別のビルド ジョブがあるとします。各モジュールには、複数の成果物を集約する親 POM があります。A は B に依存し、B は C に依存します。依存関係のバージョンは、A、B、および C の親であるトップ レベルの POM D で定義されます。プロジェクト全体で使用される各アーティファクトのバージョンは 1 つだけです。リリースを行うために、次のことを行います。

  1. Hudson を介してリリース プラグインを使用して、最上位の POM D をリリースします。
  2. それ以上の依存関係がない C から始めます。
  3. D のリリース バージョンを参照するように C を変更します。リリース プラグインを使用して C をリリースします。
  4. C のリリース バージョンを D に入力して、C に依存するモジュールを C の安定バージョンでリリースできるようにします。
  5. リリース プラグインを使用して D を再度リリースします。
  6. B の場合は 3 ~ 5 を行います
  7. A に対して 3 ~ 5 を行う

その後、A、B、C のすべてのアーティファクトの安定した非スナップショット ビルドを作成し、それらを組み合わせてアプリケーションの最終的な安定リリースを作成できます。

実際、私はそのようなモジュールを 3 つだけでなく 20 ほど持っていました。この手順は非常に複雑で、多くの潜在的な問題があると思います。

  • 依存関係階層のレベルごとに 1 回ずつ、D を数回リリースする必要があります。最終的に、A、B、および C の安定バージョンのみを含む D ができました。次の開発バージョンに進むには、D を再度編集して、リリースされたモジュールのすべての新しいスナップショット バージョンを参照する必要があります。一般に、リリース プラグインを使用する場合でも、依存関係の管理はすべて手動で行う必要があります。

  • 私がリリースしている間に誰かがコミットすると、物事が台無しになる可能性があります。確実にするには、すべてのモジュールで特定のリビジョンをチェックアウトし、ビルドしてテストし、そのリビジョンのすべてのモジュールをリリースする必要があります。しかし、ハドソンと複数のジョブでそれを保証するにはどうすればよいでしょうか?

  • Subversion サーバー、Hudson サーバー、および Maven アーカイブ サーバーの 3 つの異なるシステムに依存します。1つだけダウンしていると、もうリリースできません。

  • 時間がかかる。このプロセスでは、リリースするモジュールごとに、多くのビルド、パッケージ化、アップロード、ダウンロード、抽出などが何度も行われます。アーカイブとの多くの冗長なデータ交換が発生します。しかし、Hudson には必要なすべてのソース コードがあるため、実際にはすべてローカルで実行できます。最後に 1 回だけ、最終的なパッケージをアップロードする必要があります。

  • アーカイブ サーバーでパッケージを紛失したとします。タグ付けされたバージョンをチェックアウトし、それらすべてを適切な順序で再構築するよう Hudson に指示する簡単な方法はありません。

すべてのコードを一度にチェックアウトし、1 つのグローバル バージョンを適用し、ビルドしてテストし、コミットし、コミットにタグを付け、最後にバイナリをアップロードするのと同じくらい簡単ではないのはなぜでしょうか?

これに関するアイデアをありがとう。

4

2 に答える 2

1

それはとても簡単です。親 pom を使用すると、すべてのモジュールが同じ親を指すようにすることができます。次に、子モジュールのバージョンを次のように設定し${version.properties}ます。ビルドを実行するときmvn -Dversion.properties x.y.x-SNAPSHOT(開発用) またはx.y.z製品ビルド用に実行すると、すべてのモジュールが同じバージョンで一度にデプロイされます。

そのため、自動ビルド<version.properties>1.1.1-SNAPSHOT</version.properties>で settings.xml に を指定するには、リリースされた製品が必要な場合は、実行時に で追加のパラメーターを指定して-Dx.y.z、settings.xml ファイルを上書きします。

これに対する唯一の秘訣は、親 pom には動的に指定されていないバージョンが必要であり、それをすべての子ドキュメントにも設定する必要があることです。そのため、リリースごとにそのバージョン番号を手動で更新することをお勧めします (ただし、おそらくそのためのプラグインがあります)。

于 2011-03-12T19:42:19.710 に答える
0

モジュールを常に同期してリリースしている場合は、すべてのモジュールを含み、すべてのバージョンが同じであることを確認するプロジェクト全体に対して単一の親 pom を使用します。最上位をリリースすると、すべてのモジュールが適切なバージョンで順番に一度にリリースされます。

于 2011-03-12T19:55:16.350 に答える