web-dev-qa-db-ja.com

ハドソンビルドの失敗:解決できない親POM

以前はプロジェクトで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の初心者ですが、なぜそれが機能しなくなったのか理解できません...

どんな助けでも大歓迎です!

ニコラス

8
Nicolas

relativePathparentの)のデフォルトは../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が後で変更された場合、これは更新されません。

16
Raghuram

Maven-REPOからRoot-POMを取得することも通常は機能するはずですが(あなたと同じように)、これまでのところ、新しいハドソンサイトのREPOにルートpomがインストールされるようにトリガーされていないことを期待します。

これを回避するには、relativePathプロパティを使用します。このようなもの:

<relativePath>../pom.xml</relativePath>

あなたの<parent>モジュール構造でルートpomを探すようにmavenに指示するタグ。

4
HefferWolf

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ジョブがあります)

1
apa64

Jenkinsサーバーの.m2/repository/a/b/cフォルダーから、関連するpomファイルと、同じフォルダー内の同様の名前のある種のメタデータファイルを削除するだけで、これを機能させることができました。

これを行った後にjenkinsビルドを再実行すると、問題なく動作しました。

これが誰かを助けることを願っています...

0
vikingsteve