Hudson构建失败:不可解析的父POM

时间:2011-03-02 16:58:30

标签: build maven hudson parent pom.xml

我曾经和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) 耳朵(将.war和.jar打包成.ear)

我正在使用Subversion,在我的“trunk”文件夹下,我得到了一个“MyProject”文件夹,包括:

.project
.settings/
business/
ear/
pom.xml
src/
web/

会发生什么:

在我的Hudson作业配置中,我填写了SVN字段“存储库URL”:

  

的http:// [...] /中继/ MyProject的/耳

这是“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存储库中的“../pom.xml”,位于“trunk / MyFolder”下。

但是哈德森出于某种原因无法看到它(但就像我说的那样,它曾经在以前的服务器上运行)。

有任何线索吗?

[/编辑]

我想这是一个新手的错误,我是Maven的初学者,但我无法弄清楚为什么它不再起作用了......

任何帮助将不胜感激!

尼古拉斯

4 个答案:

答案 0 :(得分:16)

relativePathparent)默认为../pom.xml。看起来它不存在于那里。您可以将其设置为空值,以便maven将其作为依赖项下载。

 <relativePath/> 

This link讨论了这一点。

[编辑:基于对问题的编辑]

Hudson只看到ear文件夹中的源代码。虽然父pom存在于SVN中,但Hudson无法使用它。缺少父母pom在Maven 2中是一个警告,但在Maven 3中是strict

有两种方法可以解决这个问题。

一个是指定hudson,url http://[...]/trunk/MyProject/。然后,您可以选择构建所有模块,或者仍然选择单独构建pom.xml耳朵项目。

另一种是在hudson系统上手动运行mvn install,以便父pom一次部署,然后由hudson使用。但是,如果随后更改父pom,则不会更新。

答案 1 :(得分:4)

从Maven-REPO中检索Root-POM通常也可以正常工作(就像你一样),但我希望你到目前为止还没有触发根pom安装到新的hudson网站上的REPO中。 / p>

要避免这种情况,请使用relativePath属性,例如像这样的东西:

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

<parent>标记中,它会告诉maven在模块结构中查找根pom。

答案 2 :(得分:1)

我遇到了与Hudson,Sonar插件和多模块Maven项目相同的问题:当Hudson试图运行声纳时,“不可解析的父POM”:声纳。解决方案是在声纳部分下的Hudson作业配置中指定Root POM位置。

SVN中的项目结构(每个项目结构都是项目根目录中包含pom.xml的Maven项目):

foo-parent
  +- foo-ui-module
  +- bar-other-module

我为每个项目都有单独的Hudson工作,“foo-parent”,“foo-ui-module”和“bar-other-module”。在Hudson工作中运行的声纳无法找到父POM,即使构建成功到那时为止。也许Sonar插件不会使用与其他工作相同的Maven设置,因为它没有尝试从我们的Artifactory存储库中查找父POM,甚至在项目POM中也没有使用<relativePath/>

Root POM设置的位置在作业的配置下 - &gt;声纳 - &gt;高级 - &gt;根POM:../foo-parent/pom.xml(我在此路径上有foo-parent工作)

答案 3 :(得分:0)

我们设法通过简单地从我们的jenkins服务器上的.m2/repository/a/b/c文件夹中删除相关的pom文件以及在同一文件夹中具有类似名称的某种元数据文件来实现此功能。

在完成此操作之后重新运行jenkins构建工作正常。

希望这有助于某人...