美芬: 不可解析的父 POM

我将 maven 项目设置为1个 shell 项目和4个子模块。当我尝试构建外壳的时候。我得到了:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project module1:1.0_A0 (C:\module1\pom.xml) has 1 error
[ERROR] Non-resolvable parent POM: Failure to find shell:pom:1.0_A0 in http://nyhub1.ny.ssmb.com:8081/nexus/content/repositories/JBoss/ was cached in the local repository, resolution will not be reattempted until the update interval of jboss has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 5, column 11 -> [Help 2]

如果我尝试构建一个单独的模块,我得到相同的错误,只是用任何模块替换 module1。

让他们都在花束里提到父母。

<parent>
<artifactId>shell</artifactId>
<groupId>converter</groupId>
<version>1.0_A0</version>
</parent>

以下是弹球的相关部分:

<groupId>converter</groupId>
<artifactId>shell</artifactId>
<version>1.0_A0</version>
<packaging>pom</packaging>
<name>shell</name>




<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
<module>module4</module>
</modules>
480333 次浏览

只是为了参考。

玛文的快乐。

将模块的相对路径放到. ./pom.xml 解决了这个问题。

parent元素有一个 relativePath元素,您需要指向父元素的目录。它默认为 ..

另一个原因也可能是父工件来自存储库,而这个存储库不能从 pom.xml访问,通常是私有存储库。解决方案是在 pom.xml中提供该存储库:

<repositories>
<repository>
<id>internal-repo</id>
<name>internal repository</name>
<url>https://my/private/repo</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

在我的案例中,由于 Eclipse,问题更加复杂: 存储库仅在特殊配置文件(<profiles><profile><id>activate-private-repo</id><repositories>...)中处于活动状态,而且 Eclipse 中的 Maven GUI 不允许通过 Ctrl+Alt+P快捷方式设置这个配置文件。

解决方案是在配置文件之外临时声明存储库(无条件地) ,启动 Alt+F5 Maven Update Project,激活配置文件并将存储库声明放回配置文件。这更像是 Eclipse bug,而不是 Maven bug。

还可以通过将正确的 settings.xml文件放入 ~/.m2/目录来修复它。

验证您在子 POM 中的值是否正确

GroupId
ArtefactId
Version

例如,在 Eclipse 中,您可以搜索: Eclipse: search parent pom

<version>${project.version}</version>代替 <version>1.0_A0</version>

运行 mvn 一次。这将下载所有需要的存储库。在这一步之后,您可以切换回 1.0_A0

我在工作中也遇到过类似的问题。

在. m2文件夹中创建没有依赖项的父项目。

然后在父 POM 中添加子模块并运行 Maven build。

<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
<module>module4</module>
</modules>

我遇到的问题是,两个反应器构建 pom.xml 文件具有相同的 artefactId。

只需添加 <relativePath />,这样在 pom 中的父代看起来应该是:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath />
</parent>

不可分解的母 POM: 这意味着您无法解析父回购。

打开调试模式:

[DEBUG] Reading global settings from **/usr/local/Cellar/maven/3.5.4/libexec/conf/settings.xml**
[DEBUG] **Reading user settings from /Users/username/.m2/settings.xml**
[DEBUG] Reading global toolchains from /usr/local/Cellar/maven/3.5.4/libexec/conf/toolchains.xml
[DEBUG] Reading user toolchains from /Users/username/.m2/toolchains.xml
[DEBUG] Using local repository at /Users/username/.m2/repository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for /Users/username/.m2/repository
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:

因为父回购不是 Maven 中心的一部分。 解决方案是在 ~ m2/中指定 seting.xml,以帮助生成父 POM./Users/username/. m2/setings.xml

在该 XML 中,可能需要指定存储库信息。

<relativePath>

如果在子项目下生成,那么 <relativePath>可以帮助您解决父项目。

安装家长装置

但是,如果您在子项目的文件夹之外构建该项目,则 <relativePath>无法工作。您可以首先将父项目 install到您的本地存储库中,然后构建子项目。

中添加依赖项

Xml:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</dependency>

经过长时间的尝试,我解决了这个问题,我在本地的子模块文件目录中创建了另一个名为“ father _ pom.xml”的文件,并将位于远程的 father _ pom.xml 的内容粘贴到新创建的“ father _ pom.xml”中。 它对我起作用了,错误消息已经消失了。

内部的相对路径标记执行如下操作

<relative>{project_name}/pom.xml</relative>

然后是 RunAs-> Maven build

这招对我很管用。

当我从.m2文件夹中删除 settings.xml时,它被修复了。

我在父文件中有以下配置:

  <properties>
<revision>1.0-SNAPSHOT</revision>
</properties>


<groupId>com.company.org</groupId>
<artifactId>api-reactor-pom</artifactId>
<version>$revision</version>
<packaging>pom</packaging>

我得到了’不可解析的父 POM’错误。我改变版本为 <version>1.0-SNAPSHOT</version>,它消失了。

Apache Maven 3.6.3.

在这种情况下,找不到父工件。正如其他人指出的那样,将 <relativePath/>添加到引用本地无法找到的父节点的 pom 中可能是有效的。但是 为什么会有用呢?

如果父 POM 不在父文件夹中,则需要使用 引用位置的 relativePath 标记。 ... 跳过本地文件搜索,直接搜索父 POM 在 Maven 存储库中,我们需要显式地将 relativePath 设置为 空值

他们解释了 给你

在其他情况下,它不会工作,因为真正的原因是 Maven 无法找到指定存储库以检查父工件的 settings.xml。例如,当您尝试从 WSL2(Windows 上的 Linux shell)构建 Maven 项目时,您还没有设置 Maven 配置。

在这种情况下,您需要在。或者创建一个对它的引用,例如通过一个符号链接。 (这是一个不同的问题,但可以像 这个那样解决。)

除了 Luke Willis回答,看起来像这样:

<parent>
<groupId>com.example</groupId>
<artifactId>some-module</artifactId>
<version>1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>