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

时间:2011-11-17 16:52:06

标签: maven-3 pom.xml

迁移到Mavent 3.0.3后,几个项目中的父poms无法再解析。

项目是以默认方式构建的,所以我设置了 parent.relativePath to“../ 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的不可解析的父POM:myArtifactId:1.0:未能   找到myGroup:myParentArtifactId:1.0 in   http://myRepo.net/archiva/repository/maven2被缓存在当地   存储库,重新污染将不会重新尝试,直到更新   已经过了maven2的间隔或强制更新   'parent.relativePath'指向错误的本地POM @   myGroup:myParentArtifactId:1.0,C:\ myProjectDir \ parent \ pom.xml,line   x,列y - > [帮助2]

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

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

更新

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

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

  

因为我不一定想回答我自己的问题   有人可以解释为什么maven3现在这样做或为什么老了   方法是错误的。

8 个答案:

答案 0 :(得分:34)

确保你仔细检查你在child-pom中引用的版本是否与parent-pom中的相同。对我来说,我在父版本中遇到了版本并将其作为3.1.0.0-RELEASE,但在child-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>

答案 1 :(得分:11)

以下是answer您的问题。

默认情况下,maven在../pom.xml中查找relativePath。请改用空<relativePath/>标记。

答案 2 :(得分:6)

  

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

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

  • pom.xml parentpom parent正确定义pom.xml pom为rootpom的{​​{1}}吗?
  • rootpom文件夹是否包含pom.xml以及paretpom文件夹?

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

你需要检查你的相对路径,根据你父模块的深度,如果模块刚好在父模块之下,那么在模块中放置相对路径为: ../的pom.xml

如果它的2级则下降 ../../的pom.xml

答案 5 :(得分:0)

请检查日志是否有http.HttpWagon $ __ sisu1:找不到'basicAuthScope'这个错误或警告,如果是这样你需要使用maven 3.2.5版本,这将解决错误。

答案 6 :(得分:0)

<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然后不需要此路径

答案 7 :(得分:0)

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