1

これは ear プロジェクトの単純化された例です。親 pom は EAR、EJB、および jar を集約します。

私はSVNに保存されたMavenプロジェクトにこの構造を持っています:

parent/
|- pom.xml
|- modulA/
|  |- pom.xml
|- modulB/
|  |- pom.xml

modulB には modulA の依存関係があります

pom.xml にはモジュールセクションがあります

<modules>
  <module>modulA</module>
  <module>modulB</module>
</modules>

そして、依存関係管理セクション

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>modulA</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>group</groupId>
            <artifactId>modulB</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

サブモジュールは親を参照します

<parent>
    <groupId>group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <relativePath>..</relativePath>
</parent>

maven 2.2.1(Windows)で初めてコンパイルしたときのPCで

mvn clean compile

問題はありません

しかし.... Jenkinsが初めてコンパイルしようとしたとき(Maven 2.2.1 Linux RedHat)

Missing:
----------
 1) modulA:jar:0.0.2-SNAPSHOT

   Try downloading the file manually from the project website.

   Then, install it using the command: 
      mvn install:install-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2-   SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

   Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

   Path to dependency: 
      1) modulB:ejb:0.0.2-SNAPSHOT
 2) modulA:jar:0.0.2-SNAPSHOT


   ----------
   1 required artifacts are missing.

どうして????????

その後、PC から Artifactory にプロジェクトをデプロイすると、Jenkins はリポジトリからアーティファクトをダウンロードするため、Jenkins には問題がありません...しかし、なぜ Jenkins はリポジトリ内のアーティファクトに依存するのでしょうか?

:(

前もって感謝します

編集:

dependencyManagement セクションは依存関係を「定義」するだけだと思いましたが、サブモジュールが依存関係を使用しない場合、依存関係はサブモジュールに追加されません。dependencyManagement セクションを削除しても、Jenkins の問題は引き続き発生します。

私のPCでは問題なく動作します。

4

2 に答える 2

0

上記の依存関係管理セクションが親 pom 内にあることを願っています。あなたの要件によると、 modulB には modulA の依存関係があります。したがって、依存関係を親 pom に含めるのではなく、moduleB に含めることをお勧めします。初めて実行するとき、親 pom で言及したので、maven は両方の依存関係を探していると思います。プロジェクトのビルド順序を確認してください。最初にモジュール A をビルドし、次に B をビルドします。あなたの場合、moduleA の pom ファイルに他のすべての依存関係を含めてください。ビルドすると、jar ファイルが m2 リポジトリにデプロイされます。そして、moduleB のビルドが開始され、依存関係が既に m2 リポジトリにあるため、叫ばれず、プロジェクトが正常にビルドされます。

于 2012-01-29T19:26:23.190 に答える
0

親プロジェクトを初めてビルドするとき、Jenkins ユーザーの maven リポジトリには modulA がインストールされていません。 clean compileその後、modulA で正常に実行されますが、何もインストールされません。modulB で実行すると、modulA への依存関係を解決できません。

Jenkins ジョブの目標が のclean install代わりであるclean compile場合、modulB ビルドが開始される前に modulA のアーティファクトが Jenkins ユーザーのリポジトリにインストールされ、すべてが機能します。

mvn installmodulAで少なくとも1回実行したか、IDEのクラスパスが問題を解決したため、おそらくこれは自分のマシンで機能しました。

于 2014-01-22T22:28:06.960 に答える