2012-01-29 24 views
1

これはearプロジェクトの簡単な例です。親pomはEAR、EJB、およびJARを集約しています。Jenkins and maven multi moduleプロジェクトに不具合がありません

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

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

はmodulBはモジュラ

の依存関係の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> 
私はMavenの2.2.1で初めてコンパイル時に0

サブモジュールは、(Windowsの場合)

mvn clean compile 

私は何の問題を持っていない私のPCで

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

親を参照

けど....ジェンキンスが初めてコンパイルしよう(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で動作します。アウト問題。

+1

モジュールの1つに有効なPOMを取得することは可能ですか?ローカルで動作する場合は、問題が導入される前に、アーティファクトが開発の一部としてローカルリポジトリにデプロイされている可能性があります。新しいマシン(ビルドマシンなど)でビルドしようとするまで、 – chrisbunney

+0

あなたの箱のローカルMavenリポジトリをきれいにすると、あなたの箱のビルドは初めて失敗しますか?私は「はい」と推測しています。そうであれば、ビルド前にmodulA-0.0.2-SNAPSHOT.jarが参照されています。あなたの親とモジュールのポムをもっと見ることなく、それが何であるか言うのは難しいです。 – BenjaminLinus

答えて

0

上記の依存関係管理セクションが親pomの内側にあることを願っています。あなたの要件によると、modulBにはmodulAの依存関係があります。だから私はあなたが親のpomの中に持っているのではなく、モジュールBに依存関係を含めることを提案する。私は最初に実行されるときに、あなたが親のpom.Lookであなたのプロジェクト構築命令を述べたので、Mavenが両方の依存関係を探していると思います。最初にモジュールAをビルドし、次にBをビルドします。あなたのケースでは、moduleAのpomファイルに他のすべての依存関係を含めることを願っています。ビルドすると、jarファイルをm2リポジトリに展開します。そして、moduleBがビルドを開始し、あなたの依存関係が既にm2リポジトリにあるので、叫んでもプロジェクトはうまく構築されません。

0

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

clean compileの代わりにJenkinsジョブの目標がclean installだった場合、modulAの成果物はmodulBのビルドが開始される前にJenkinsのユーザーのリポジトリにインストールされ、すべて動作します。

おそらくmvn installをmodulAで少なくとも1回実行したか、IDEのクラスパスによって問題が解決されたため、これはあなた自身のマシンで動作していたようです。

関連する問題