2

次のような複雑なプロジェクト構造があります。

- root (no pom)
     - parent(parent pom.xml)
     + project A (pom.xml)
     + project B (pom.xml)
     - project C (pom.xml)
         - subproject 1 (pom.xml)
         - subproject 2 (pom.xml)
     + project N (pom.xml)

subproject 2Bamboo サーバーを使用してビルドする必要があります。Bamboo を使用してsubproject 2コードをチェックアウトしますが、それを実行mvn installすると、「解決できない親 POM」というメッセージが表示されて失敗します。

すべてのコードが 1 つの場所にある場合、ビルドは正常に実行されます。rootチェックアウトしたくないプロジェクトがたくさんあるので、レベルでコードをチェックアウトしたくありません (私の例では、プロジェクト A、B、N、およびサブプロジェクト 1 になります)。

親、プロジェクト C/pom、およびサブプロジェクト 2 のコードを 3 回チェックアウトしようとしましたが、コードは互いに関係のない別々のディレクトリに配置されているため、あまり役に立ちません。

PSモジュールを使用していませんが、モジュールで試してみましたが、違いはありませんでした。これらは非常に些細なことなので、実際のP​​OMは投稿していません。基本的に子pomにはparent要素があり、それがすべての関係です。

すべてのアップストリーム プロジェクトは、ローカル リポジトリとリモート リポジトリの両方にデプロイされます

4

3 に答える 3

2

mvn は、ローカル ファイル システムの相対パス、ローカル マシンの m2 リポジトリ、または外部リポジトリの 3 つの場所で依存関係を探します。Bamboo がアクセスできるリポジトリにすべての依存関係をインストールすると、ビルドはおそらく機能します。

これをテストするには、ローカル マシンで、ルート ディレクトリから mvn install を実行し (マシンの m2 リポジトリにすべての依存関係を配置します)、別のディレクトリで subproject2 をチェックアウトしてから、mvn install subproject2 を実行できますか?

それが機能する場合、サブプロジェクト 2 の依存関係は、Bamboo がアクセスできる Maven リポジトリにある必要があります。Bamboo で mvn install を実行する前に、 artifactoryなどを使用してそれらをデプロイします。

于 2012-09-09T20:01:16.263 に答える
1

subproject1非常によく似たプロジェクト構造があり、 と同等のものをチェックアウトしてビルドするだけの Jenkins ジョブを作成できることを確認しましたmvn -U clean install。私は Bamboo インスタンスにアクセスできませんが、Jenkins と Bamboo はどちらも内部で Maven を呼び出すだけなので、違いはありません。

あなたが述べたように、機能するもう1つのオプションは、リポジトリ全体(またはルートとすべてのモジュールを含むディレクトリ)をチェックアウトmvn -U clean install -pl subproject1 -amし、親POMで実行することです。

これを解決するには、さらに多くの情報が必要です。 コメントの 1 つで、「すべての [upstream] 依存関係は既にリポジトリにデプロイされている」と述べました。ローカル リポジトリ (.m2/repository) のことですか? このディレクトリにすべての親 POM が含まれていることを再確認する必要があります。プロキシ (Artifactory/Nexus) からすべてのアーティファクトを解決していますか? その場合は、POM がそこで利用可能であることも確認してください。

現在の構造図には、POM の場所が示されていません。正しくセットアップされていると思いますが、子モジュールを奇妙な場所に配置して問題を引き起こす可能性があるケースを見てきました。POMの相対的な位置は重要です (カスタマイズを行わない限り)。ルートで実行treeし、出力をサニタイズして、POM が相互に関連する場所を正確に把握できるようにしていただけますか? 例えば:

parentProject
|-- projectA
|   |-- pom.xml
|
|-- projectB
|   |-- pom.xml
|   |
|   |-- subProject1
|   |   |-- pom.xml
|   |    
|   |-- subProject2
|       |-- pom.xml
|
|-- pom.xml

最後に、ビルドしようとしている子プロジェクト/モジュールに移動して、の出力を投稿していただけますmvn help:effective-pomか?

于 2012-09-14T15:15:54.470 に答える
0

../parentについて説明する相対リンクを使用して、各Mavenモジュールを自己完結型にする必要があります。これにより、この設計が破られます。

GAVプロパティによって親を明示的に定義してみてください。次に、これらのpomがinstallローカルのMavenリポジトリで編集され、サブプロジェクトをビルドできるようになります。

15モジュールビルドダウン3レベルを実行し、これはすべて可能です。

唯一の問題は、バージョンをバンプするときに、解決プロセスをブーストラップするためにルートpomファイルのインストールを開始する必要があることです。

于 2012-09-26T22:34:17.643 に答える