以前はプロジェクトでHudsonと協力していましたが、最近は新しいサーバーに移動する必要がありました。
以前とまったく同じ方法で構成しましたが(私が知る限り)、ビルドを起動しようとすると失敗し、次のエラーが発生します。
Démarré par l'utilisateur anonymous
Checking out http://[...]/trunk/MyProject/ear
A .classpath
A .project
A target
AU target/ear-1.0-SNAPSHOT.ear
A target/application.xml
A target/ear-1.0-SNAPSHOT
A target/ear-1.0-SNAPSHOT/META-INF
A target/ear-1.0-SNAPSHOT/META-INF/application.xml
AU target/ear-1.0-SNAPSHOT/web-1.0-SNAPSHOT.war
AU target/ear-1.0-SNAPSHOT/business-1.0-SNAPSHOT.jar
A pom.xml
A .settings
A .settings/org.Eclipse.jdt.core.prefs
A .settings/org.maven.ide.Eclipse.prefs
At revision 136
no change for http://[...]/trunk/MyProject/ear since the previous build
Found mavenVersion 3.0.2 from file jar:file:/usr/share/maven/Apache-maven-3.0.2/lib/maven-core-3.0.2.jar!/META-INF/maven/org.Apache.maven/maven-core/pom.properties
Parsing POMs
ERROR: Echec à la lecture des POMs
org.Apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Could not find artifact com.rha:MyProject:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 9, column 10
at org.Apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.Java:325)
at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.Java:360)
at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.Java:330)
at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.Java:1148)
at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.Java:991)
at hudson.FilePath.act(FilePath.Java:756)
at hudson.FilePath.act(FilePath.Java:738)
at hudson.maven.MavenModuleSetBuild$RunnerImpl.parsePoms(MavenModuleSetBuild.Java:698)
at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.Java:531)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.Java:420)
at hudson.model.Run.run(Run.Java:1362)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.Java:405)
at hudson.model.ResourceController.execute(ResourceController.Java:88)
at hudson.model.Executor.run(Executor.Java:145)
Finished: FAILURE
Hudsonの「workspace」にアクセスしたときのpom.xmlファイルは次のようになります。
[...]
<parent>
<groupId>com.rha</groupId>
<artifactId>MyProject</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
[...]
<dependencies>
<dependency>
<groupId>com.rha</groupId>
<artifactId>business</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>com.rha</groupId>
<artifactId>web</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
</dependency>
</dependencies>
</project>
[編集]
実際、私はいくつかの重要な情報を忘れました:
私のプロジェクトは3つの部分に分かれています。
ビジネス(.jarにパッケージ化)web(.warにパッケージ化)ear(.warと.jarを.earにパッケージ化)
Subversionを使用していますが、「trunk」フォルダーの下に、次のような「MyProject」フォルダーがあります。
.project
.settings/
business/
ear/
pom.xml
src/
web/
何が起こるか:
ハドソンのジョブ構成で、SVNフィールドの「リポジトリURL」に次の情報を入力しました。
http:// [...]/trunk/MyProject/ear
これが「MyProject」フォルダの「pom.xml」です。
<?xml version="1.0" encoding="UTF-8"?>
<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
[...]
<modules>
<module>business</module>
<module>web</module>
<module>ear</module>
</modules>
[...]
したがって、親の「pom.xml」は、実際には、SVNリポジトリの「trunk/MyFolder」の下の「../pom.xml」にあります。
しかし、ハドソンは何らかの理由でそれを見ることができません(しかし、私が言ったように、それは以前のサーバーで動作していました)。
どんな手掛かり ?
[/編集]
これは新人の間違いだと思います。私はMavenの初心者ですが、なぜそれが機能しなくなったのか理解できません...
どんな助けでも大歓迎です!
ニコラス
relativePath
(parent
の)のデフォルトは../pom.xml
です。そこには存在しないようです。 Mavenが依存関係としてダウンロードするように、空の値に設定できます。
<relativePath/>
このリンク これについて説明します。
[編集:質問の編集に基づく]
ハドソンは、earフォルダー内のソースコードのみを確認します。親pomはSVNに存在しますが、Hudsonは使用できません。親pomの欠落は、Maven 2では警告でしたが、Maven 3では strict でした。
これを解決するには2つの方法があります。
1つは、ハドソンにURL http://[...]/trunk/MyProject/
を指定することです。次に、すべてのモジュールをビルドするか、earプロジェクトのpom.xml
のみをビルドするかを選択できます。
もう1つは、ハドソンシステムでmvn install
を手動で実行して、親pomが一度デプロイされ、その後ハドソンによって使用されるようにすることです。ただし、親pomが後で変更された場合、これは更新されません。
Maven-REPOからRoot-POMを取得することも通常は機能するはずですが(あなたと同じように)、これまでのところ、新しいハドソンサイトのREPOにルートpomがインストールされるようにトリガーされていないことを期待します。
これを回避するには、relativePathプロパティを使用します。このようなもの:
<relativePath>../pom.xml</relativePath>
あなたの<parent>
モジュール構造でルートpomを探すようにmavenに指示するタグ。
Hudsonがsonar:sonarを実行しようとしたときに、Hudson、Sonarプラグイン、およびマルチモジュールMavenプロジェクトで同じ問題が発生しました。「解決できない親POM」です。解決策は、ソナーセクションの下のハドソンジョブ構成でルートPOMの場所を指定することでした。
SVNのプロジェクト構造(それぞれがプロジェクトルートにpom.xmlを持つMavenプロジェクトです):
foo-parent
+- foo-ui-module
+- bar-other-module
プロジェクトごとに、「foo-parent」、「foo-ui-module」、「bar-other-module」という個別のハドソンジョブがあります。ハドソンジョブで実行されたSonarは、その時点までビルドが成功したにもかかわらず、親POMを見つけることができませんでした。 Sonarプラグインは、プロジェクトPOMに<relativePath/>
があっても、Artifactoryリポジトリから親POMを検索しようとしなかったため、残りのジョブと同じMaven設定を使用しない可能性があります。
ルートPOM設定の場所は、ジョブの[構成]-> [ソナー]-> [詳細]-> [ルートPOM]の下にありました:../foo-parent/pom.xml
(このパスにfoo-parentジョブがあります)
Jenkinsサーバーの.m2/repository/a/b/c
フォルダーから、関連するpomファイルと、同じフォルダー内の同様の名前のある種のメタデータファイルを削除するだけで、これを機能させることができました。
これを行った後にjenkinsビルドを再実行すると、問題なく動作しました。
これが誰かを助けることを願っています...