使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM

Posted

技术标签:

【中文标题】使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM【英文标题】:Non-resolvable parent POM using Maven 3.0.3 and relativePath notation 【发布时间】:2011-12-31 13:06:54 【问题描述】:

迁移到 Mavent 3.0.3 后,多个项目中的父 pom 无法再解决。

项目以默认方式构建,因此我设置 parent.relativePath 到“../pom.xml”

superpom (located in repository)
|-rootpom (located locally: no error)
|-|-parentpom (located locally: error resolving parent)
|-|-|-module1 (located locally: error resolving parent)
|-|-|-module2 (located locally: error resolving parent)
|-|-|-module3 (located locally: error resolving parent)
|-|-|-module4 (located locally: error resolving parent)

错误...

myGroup:myArtifactId:1.0 的不可解析父 POM:未能 找到 myGroup:myParentArtifactId:1.0 在 http://myRepo.net/archiva/repository/maven2 被缓存在本地 存储库,在更新之前不会重新尝试解析 maven2 的时间间隔已过或强制更新 'parent.relativePath' 指向错误的本地 POM @ myGroup:myParentArtifactId:1.0, C:\myProjectDir\parent\pom.xml, 行 x,第 y 列 -> [帮助 2]

...似乎表明在存储库中搜索了pom,所以我想知道为什么在其他地方找不到之前在本地找不到pom。

我已经读到,当在 settings.xml 中定义多个存储库时,maven3 可能会感到困惑,但这始终是在存储库中而不是本地搜索 pom 时。

更新

到目前为止,我们确实在父项目级别 (parentpom) 上执行了 maven 构建 - 我不知道这一事实很重要,因为 maven2 到目前为止已成功完成。

在使用 maven3 时,这似乎很重要。 在根项目级别 (rootpom) 上执行 maven3 时,构建成功完成。 所以我眼前的问题就解决了。

因为我不一定想回答我自己的问题 有人可以解释为什么 maven3 现在会这样或者为什么旧的 方法不对。

【问题讨论】:

您是否尝试将relativePath 仅设置为文件夹名称? (例如../,没有pom.xml 我试过“..”“../pom.xml”,现在“../” 【参考方案1】:

确保您仔细检查您在 child-pom 中引用的版本是否与 parent-pom 中的相同。对我来说,我在父版本中添加了版本并将其作为 3.1.0.0-RELEASE,但在子 pom 中,我仍然通过 relativePath 引用以前的版本,并将其定义为 2.0.0.0-SNAPSHOT。如果我只包含父目录,或者将“pom.xml”附加到目录中,这没有任何区别:

    <parent>        
    <artifactId>eric-project-parent</artifactId>
    <groupId>com.eric.common</groupId>
     <!-- Should be 3.1.0.0-RELEASE -->
    <version>2.0.0.0-SNAPSHOT</version>     
    <relativePath>
                ../../EricParentAsset/projects/eric-project-parent</relativePath>           
</parent>

【讨论】:

【参考方案2】:

这里是answer 你的问题。

默认情况下,maven 在../pom.xml 中查找relativePath。请改用空的&lt;relativePath/&gt; 标签。

【讨论】:

&lt;relativePath&gt;./pom.xml&lt;relativePath&gt; 是否也能正常工作,但让下一个查看此 POM 的人更清楚? ArtB,您提出将当前项目的 pom 设置为父 pom。对我来说,这比空字符串更令人困惑。我希望这不仅会起作用。以下是documentation 中所写的内容:将值设置为空字符串,以防您想禁用该功能并始终从存储库中解析父 POM【参考方案3】:

'parent.relativePath' 指向错误的本地 POM @ myGroup:myParentArtifactId:1.0, C:\myProjectDir\parent\pom.xml

这表明maven确实在本地搜索了父pom,但是发现不是正确的pom。

pom.xmlparentpom 是否正确地将 parent pom 定义为 pom.xmlrootpomrootpom 文件夹是否包含pom.xml 以及paretpom 文件夹?

【讨论】:

是的,我的父项目的父项目被正确定义为根项目(版本、工件 ID、组 ID 和相对路径),并且根项目文件夹包含父项目文件夹。这些项目确实使用 maven2 正确构建。我只是在切换到 maven3 后添加了 relativePath。【参考方案4】:

我遇到了同样的问题。我的项目布局看起来像

\---super
    \---thirdparty
        +---mod1-root
        |   +---mod1-linux32
        |   \---mod1-win32
        \---mod2-root
            +---mod2-linux32
            \---mod2-win32

就我而言,我在 modX 根级别的 pom.xmls 中有一个错误。我复制了 mod1-root 树并将其命名为 mod2-root。我错误地认为我已经适当地更新了所有 pom.xmls;但实际上,mod2-root/pom.xml 与 mod1-root/pom.xml 具有相同的组和工件 ID。在更正 mod2-root 的 pom.xml 以具有 mod2-root 特定的 maven 坐标后,我的问题得到了解决。

【讨论】:

【参考方案5】:

您需要检查您的相对路径,如果模块位于父级下方,则根据模块的深度,然后在模块中将相对路径设置为: ../pom.xml

如果它下降了 2 级,那么 ../../pom.xml

【讨论】:

【参考方案6】:

如果你有 http.HttpWagon$__sisu1:Cannot find 'basicAuthScope' 这个错误或警告,请检查日志,如果有,你需要使用 maven 3.2.5 版本,这将解决错误。

【讨论】:

【参考方案7】:
<parent>
        <groupId>com.test.vaquar.khan</groupId>
        <artifactId>vk-parent</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../projectname/pom.xml</relativePath>
    </parent>

在父级中添加以下行

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

如果你是从nexsus中不可用的本地父pom构建,你需要相对路径,在nexus中添加pom然后不需要这个路径

【讨论】:

【参考方案8】:

对我来说,当我仔细检查父母的“组 ID”和“工件 ID”时,它可以工作,在我的情况下是错误的,这就是问题所在。

【讨论】:

以上是关于使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM的主要内容,如果未能解决你的问题,请参考以下文章

centos配置maven环境

linux(centos7)下安装maven

Maven 3.0.3 版本:在 Mac OS X 10.5.8 上准备失败

Linux下安装maven-及常用命令

Maven环境搭建

如何为 Rest Assured 3.0.3(使用 Java 和 TestNG)声明默认解析器?