19

私はこれをグーグルで検索しましたが、誰も答えを持っていないようですが、それは可能であるはずのような初歩的なことのようです。

私は次のプロジェクト構造を持っています:

parent
   ---sub-project1
   ---sub-project2

sub-project2には、依存関係としてsub-project1が必要です。

だから私はこれをsub-project2のpomに持っています:

 <dependencies>
    <dependency>
         <artifactId>sub-project1</artifactId>
        <groupId>mygroup</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

...。

これを行うと、Mavenはsub-project1.jarファイルをダウンロードしようとします。このファイルはまだリポジトリの準備ができていないため存在しません。

依存関係にを入れようとしました<scope>import</scope>が、それも機能しませんでした-同じ結果です。

では、サブプロジェクト2をビルドするときにMavenにサブプロジェクト1を表示させるにはどうすればよいですか?

編集ここにいくつかのpomスニペットがあります:

親:

<project 
   xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0          
    http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <prerequisites>
      <maven>2.0.9</maven>
   </prerequisites>
   <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
   </modules>
 ....

サブプロジェクト1:

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>sub-project1</artifactId>
....

サブプロジェクト2:

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

   <artifactId>sub-project1</artifactId>

    <dependencies>
     ....
       <dependency>
          <artifactId>sub-project2</artifactId>
          <groupId>mygroup</groupId>
          <version>1.0-SNAPSHOT</version>
          <scope>import</scope>
      </dependency>
  </dependencies>

mvn clean install 親に乗ったときに発生するエラーは次のとおりです。

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

多くのクラス/パッケージでエラーが見つかりません

4

2 に答える 2

20

プロジェクトのモジュールを一覧表示する、親レベルのマスターpomが必要です。

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

各サブプロジェクトでは、親を参照する必要があります。

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

そして、あなたがしたのと同じように、プロジェクト間の依存関係を指定します。私が説明したいくつかのステップを見逃したと思います。

編集:親レベルでmvnクリーンインストールを発行する必要があります。

于 2010-04-06T14:10:13.723 に答える
10

これを行うと、Mavenはsub-project1.jarファイルをダウンロードしようとします。このファイルはまだリポジトリの準備ができていないため存在しません。

installこれは通常の動作です。Mavenはローカルリポジトリを介して依存関係を解決するため、最初にサブプロジェクト1を実行する必要があります。実際、この種の状況に対処する一般的な方法は、親からreactorビルド(マルチモジュールビルド)を起動することです。

親でモジュールを集約していると仮定します。つまり、「親」でこのようなものが宣言されていると仮定しますpom.xml

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

親ディレクトリに移動して、 reactorcdビルドを起動します。

$ cd parent
$ mvn install

次に、Mavenはビルド順序(モジュールとその依存関係で構成される有向グラフから差し引かれます)を計算し、計算された順序install ですべてのモジュールで実行します(特定の例では、最初に親、次にサブプロジェクト1、最後にサブプロジェクト2)。

ただし、タイプのスコープは使用しないimportでください。ここでは誤用しています。それを除く。

更新:質問は回答中に更新されました。表示されたPOMは、元の質問で示された状況を示していません(依存関係の逆転、アーティファクトIDの間違いの可能性)。ただし、提案されたアプローチは引き続き適用されます。<scope>import</scope>依存関係を削除し、親からreactorビルドを開始します。

于 2010-04-06T14:42:56.093 に答える