9

deployAtEndプロパティが に設定されたマルチモジュール プロジェクトで maven-deploy-plugin を使用していtrueます。

ルート プロジェクトで実行mvn deployした後、サブプロジェクトごとにデプロイ プラグインが実行されます。次のような内容が表示されます。 [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ subproject-name --- [INFO] Deploying package:subproject-name:v1.1 at end 最後の呼び出しはルート プロジェクト用です。 [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ parent-project --- [INFO] Deploying package:parent-project:v1.1 at end それだけで、実際のデプロイは実行されません。

を使用してマルチモジュール プロジェクトでデプロイ プラグインを正しく動作させるにはどうすればよいdeployAtEnd=trueですか?

4

2 に答える 2

6

今日この問題に遭遇したので、maven-deploy-plugin で関連する問題を見つけました。

https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193

この号の Jérôme Joslet の説明 :

私は今日この問題を発行し、回避策を見つけました。

maven-deploy-plugin は、その状態を静的変数に記録します。1 つは展開リクエストをスタックするためのもの ( deployRequests) で、もう 1 つは準備完了のプロジェクトをカウントするためのもの ( readyProjectsCounter) です。問題が発生した場合、準備完了プロジェクトをカウントするために使用される静的変数が複数あります。これは、デプロイ プラグインのクラスをロードするクラスローダが複数ある場合に発生します。これにより、複数のクラス インスタンスと複数の静的変数インスタンスが発生します。一部のモジュールは 1 つのインスタンスでカウントされ、他のモジュールは別のインスタンスでカウントされます。

その結果、リアクター内のプロジェクトの数と等しいカウンターがないため、デプロイ プラグインは保留中のデプロイ リクエストを決してフラッシュしません。

次のドキュメントに記載されているとおり: https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html :

ビルド拡張機能を使用するプロジェクトの場合、プラグイン クラスローダーはプロジェクト クラスローダーに接続されます。これにより、Maven API パッケージとプロジェクト ビルド拡張機能によってエクスポートされたパッケージの両方にプラグイン コードがアクセスできるようになります。Maven は、一意のプラグイン + 依存関係 + ビルド拡張機能の組み合わせごとに 1 つだけのクラスローダーを作成します。

Maven は、プロジェクト ビルド拡張機能の一意のセットごとに 1 つのプロジェクト クラスローダーが存在し、ビルド拡張機能のセットを持つすべてのプロジェクトで同じクラスローダーが使用されることを保証します。

<dependencies>回避策は、親プロジェクトですべての拡張プラグインをすべてのエクストラと共に宣言すること です。これにより、すべてのモジュールでプラグインをロードするために同じクラスローダーが使用されることが保証されます。

于 2017-11-27T20:13:56.770 に答える