使用 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
。请改用空的<relativePath/>
标签。
【讨论】:
<relativePath>./pom.xml<relativePath>
是否也能正常工作,但让下一个查看此 POM 的人更清楚?
ArtB,您提出将当前项目的 pom 设置为父 pom。对我来说,这比空字符串更令人困惑。我希望这不仅会起作用。以下是documentation 中所写的内容:将值设置为空字符串,以防您想禁用该功能并始终从存储库中解析父 POM【参考方案3】:
'parent.relativePath' 指向错误的本地 POM @ myGroup:myParentArtifactId:1.0, C:\myProjectDir\parent\pom.xml
这表明maven确实在本地搜索了父pom,但是发现不是正确的pom。
pom.xml
的 parentpom
是否正确地将 parent
pom 定义为 pom.xml
的 rootpom
?
rootpom
文件夹是否包含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的主要内容,如果未能解决你的问题,请参考以下文章