【问题标题】:Hudson build fail: Non-resolvable parent POMHudson 构建失败:不可解析的父 POM
【发布时间】:2011-07-07 10:41:14
【问题描述】:

我曾经在我的项目上与 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“工作区”时的 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>

[编辑]

其实我忘记了一些重要的信息:

我的项目分为三个部分:

业务(打包成.jar) web(打包成 .war) ear(将.war和.jar打包成.ear)

我正在使用 Subversion,在我的“主干”文件夹下,我有一个“MyProject”文件夹,其中包括:

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

会发生什么:

在我的 Hudson 作业配置中,我在 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存储库的“../pom.xml”,在“trunk/MyFolder”下。

但 Hudson 出于某种原因看不到它(但就像我说的,它曾经在以前的服务器上工作过)。

有什么线索吗?

[/编辑]

我想这是一个菜鸟错误,我是 Maven 的初学者,但我就是不明白为什么它不再工作了......

任何帮助将不胜感激!

尼古拉斯

【问题讨论】:

  • 那么你只有一个pom文件吗?如果你有对父 pom 文件的引用,你应该有两个。正确的?也不要检查svn中的目标目录。
  • @Amir Raminfar:查看我的编辑 =)

标签: build maven hudson parent pom.xml


【解决方案1】:

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

 <relativePath/> 

This link 讨论这个。

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

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

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

一种是指定给hudson,urlhttp://[...]/trunk/MyProject/。然后您可以选择构建所有模块或仍然选择单独构建 ear 项目的pom.xml

另一种是在hudson系统上手动运行mvn install,这样父pom就被部署一次,然后被hudson使用。但是,如果随后更改父 pom,这将不会更新。

【讨论】:

  • 非常感谢您的回答!我将 URL 更改为`http://[...]/trunk/MyProject/`,所以现在我可以看到 3 个模块。我去了“ear”模块并将Maven目标配置为clean package cargo:redeploy -P integration,但是在尝试构建时,我得到了以下信息:[...] &lt;===[HUDSON REMOTING CAPACITY]===&gt;channel started Finished: ABORTED。它基本上什么都不造=/
  • 我最终选择了mvn install 方法。它确实有效,但我不喜欢无法更新父 pom.xml 的事实......无论如何非常感谢!
  • 解决父 pom.xml 更新问题的方法是让 jenkins maven 作业安装它并像任何其他作业一样触发,如果父 pom 更新所有依赖作业作为奖励也将重建
  • 这个答案为我节省了大量时间。刚刚在 Spring in Action 示例中遇到了类似的问题。我将它们复制到我的 Eclipse 工作区,但没有注意到父 POM,它位于它们上方的文件夹中。
  • 感谢您的回答,它解释了正在发生的事情。我们的解决方案是从 jenkins 服务器 .m2 存储库中删除一些文件(请参阅单独的答案)。
【解决方案2】:

从 Maven-REPO 中检索 Root-POM 通常也可以正常工作(就像您所做的那样),但我希望您到目前为止还没有触发将根 pom 安装到新 hudson 站点上的 REPO 中。

为避免这种情况,请使用 relativePath 属性,例如像这样:

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

在你的 &lt;parent&gt; 标签中,它会告诉 maven 在你的模块结构中寻找根 pom。

【讨论】:

  • 我试过了,还是报错:[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
  • 如错误消息所述:relativePath 属性设置为错误的路径,例如如果您的 pom 在 /home/test/project/moduleA 中并且您的根 pom 在 /home/test/project/ 中,则如上所述添加“../pom.xml”。
【解决方案3】:

当 Hudson 尝试运行 sonar:sonar 时,我在使用 Hudson、Sonar 插件和多模块 Maven 项目时遇到了同样的问题:“Non-resolvable parent POM”。解决方案是在 Sonar 部分下的 Hudson 作业配置中指定 Root POM 位置。

SVN中的项目结构(每一个都是一个Maven项目,项目根目录下有pom.xml):

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

我为每个项目“foo-parent”、“foo-ui-module”和“bar-other-module”都有单独的 Hudson 工作。即使在那之前构建成功,Sonar 在 Hudson 作业中运行也找不到父 POM。也许 Sonar 插件没有使用与工作的其余部分相同的 Maven 设置,因为它没有尝试从我们的 Artifactory 存储库中查找父 POM,甚至在项目 POM 中使用 &lt;relativePath/&gt; 时也没有。

Root POM 设置的位置在作业的 Configure -> Sonar -> Advanced -> Root POM 下:../foo-parent/pom.xml(我在此路径有 foo-parent 作业)

【讨论】:

    【解决方案4】:

    我们通过简单地从我们的 jenkins 服务器上的 .m2/repository/a/b/c 文件夹中删除相关的 pom 文件以及同一个文件夹中具有相似名称的某种元数据文件来成功地完成了这项工作。

    执行此操作后重新运行 jenkins 构建效果很好。

    希望这对某人有所帮助...

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 2023-04-01
      • 2011-11-28
      • 2022-01-07
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多