0

最近のプロジェクトでMavenを紹介された後、私は過去2週間にわたってMavenを実験してきました。

現在、開発環境にマルチモジュールプロジェクトがあります。プロジェクト「A」とプロジェクト「B」はプロジェクト「ルート」の子モジュールであり、BはAに依存しています。

ここで概説するように使用することで、Bを独立して構築できることを認識しています。しかし、なぜBのルートフォルダ内からBをビルドできないのか知りたいです。mvn reactor:make...

clean installこれを説明するために、私は最初にAのルートディレクトリ内からを実行してAを独立して構築しました。しかし、Bのルートディレクトリから同じアクションを実行しようとすると、Mavenは次のようなエラーを報告しました-

Could not find artifact org.divesh.mavenrnd:root:pom:1.0 in central

Mavenは親のPOMファイルを解決できないようです。なぜこれが起こっているのかについて何か考えはありますか?Mavenマルチモジュールプロジェクトについての私の最初の理解から、プロジェクトをサブモジュールに分割する主な理由は、依存関係を共有することです。ただし、これにより、特定のモジュールをそのフォルダー内から独立して構築できなくなることはありません。

ありがとう。

編集

mvn -N clean installを実行して、ルートプロジェクトのPOMのみを担当者にインストールします。この後、Aをビルドしてインストールした後、Bを正常にビルドできました。まだはっきりしていないことが1つあります。リポジトリにルートプロジェクトのPOMをインストールしたとすると、Aをビルドしようとすると、そのすぐ上の親ルートPOM、またはリポジトリにインストールされているPOMを参照していますか?

4

2 に答える 2

3

それは正しい。あなたが言及したエラーは、Mavenが親のpomを見つけることができないことを示しています。

ここには2つのオプションがあります。

  1. 最初mvn -N installにルートプロジェクトディレクトリを呼び出して、親pomをローカルリポジトリにインストールします。次に、Bのディレクトリに移動してサブモジュールをビルドできます。
  2. <relativePath>サブモジュールpomで指定します。デフォルトでは、mavenはファイルシステムの1つ上のレベルでのみ親pomを検索します。プロジェクトに他のディレクトリ構造がある場合、Mavenが親pomを見つけるには、このオプションを指定する必要があります。

サンプルは次のとおりです。

<parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <relativePath>../../pom.xml</relativePath>
</parent>
于 2012-12-10T07:47:40.610 に答える
1

ツリーのルートからのように、mvn-plProjectToBuildライフサイクルを使用する必要があります。

mvn -pl module-b package 

mvnreactor:makeはもう使用しないでください。Maven2.0を使用している場合を除きます

すべてがmodule-bに依存していることを確認したくない場合は、次を使用する必要があります。

mvn -amd -pl module -b package

最良の方法は、プロジェクトの適切な構造を表すフォルダーレイアウトを用意することであり、relativePathを使用しないことが必要です。

于 2012-12-10T07:54:28.617 に答える