0

単一の Virgo アプリケーションが外部サービス プロバイダーの複数のバージョンと統合するための下位互換性を提供できるようにするソリューションを設計しようとしています。

たとえば、PortalApp と呼ばれるこのアプリケーションは、現在、ThirdPartyApp のバージョン 2.3 と統合されているポータルです。ThirdPartyApp v3.0 は新しい機能を備えて間もなくリリースされるため、PortalApp の新しいバージョンには、ThirdPartyApp の古いバージョンでは動作しない機能が含まれます。

実行時に両方のバージョンを動的に提供できる必要はありません。どちらか一方だけです。Virgo usr リポジトリにモジュールの 2 つのバージョンを保持し、サーバーの起動時に使用される .plan ファイルに基づいていずれかをロードできることは既に確立しています。

簡単にするために、プロジェクトは現在次のように設定されていると仮定できます。

ポータルアプリ
- ウェブアプリ
- サードパーティプロバイダー

ThirdPartyProvider に依存するモジュールは他にも多数あるため、ArtifactId を変更するとそれらのチェーンが壊れてしまいます。私がやりたいのは、同じモジュールの 2 つの異なるバージョンをビルドすることです。このようなもの:

ポータルアプリ
- ウェブアプリ
- - 1.0
- - 2.0
- サードパーティプロバイダー
- - 1.0
- - 2.0

1.0 と 2.0 の両方をモジュールとして識別する親 pom.xml を web-app (パッケージ: pom) に作成しようとしましたが、そのうちの 1 つだけがビルドされます。

PortalApp プロジェクトの 1 つのビルドで、モジュールの両方のバージョンをビルドできますか?

4

2 に答える 2

0

すべてのアーティファクトを同じバージョンに保つために、Versions Maven Pluginを使用してバージョン 2.0 または 3.0 を設定し、ビルドで mvn package -DthirdParty.version=3.0 を使用できます。

pom.xml が次のようになっていることを確認してください

<properties>
    <thirdParty.version>2.0</thirdParty.version>
</properties>

そのため、Jenkins を使用してビルドを自動化し、継続的インテグレーション プロセスですべてが正常であることを確認できます。

于 2015-02-04T14:51:00.547 に答える
0

いいえ、それは不可能です(実際には可能ですが、それは苦痛の世界なので、本当にやりたくないでしょう). pom にはバージョン タグがあり、これはビルドされるアーティファクトのバージョンです。

そうするのではなく、ThirdPartyProvider の関連するバージョンに応じて、2 番目の図にあるように、Web アプリごとに 1 つのモジュールを持つマルチモジュール プロジェクトを作成する必要があります。次に、これらの Web アプリから共通コードを取り出します。通常、これにより、web-app:1 と web-app:2 から依存する共通 Web アプリの 2 つが生成されます (これにより、「オーバーレイ」と呼ばれるものが作成されます)。 ' common のコンテンツを他の 2 つのアプリにプッシュしますが、既存のファイルを上書きしません)、および共通の Java クラスを含む共有 Java ライブラリ (サードパーティ API の使用方法によっては、これらのうちの 2 つが必要になる場合があります)それも)。

次に、両方の Web アプリをビルドして、web-app-1.war と web-app-2.war の 2 つのアーティファクトを生成します。それぞれ関連する ThridPartyProvider と共通クラス lib に依存します。

于 2015-02-03T11:04:39.777 に答える