Maven:不可解析的父母POM

时间:2011-09-30 15:01:22

标签: maven module build-automation parent-child

我将我的maven项目设置为1个shell项目和4个子模块。当我尝试构建shell时。我明白了:

[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,无论它是什么模块。

让他们都在他们的poms中引用父母。

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

以下是shell pom的相关部分:

<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>

15 个答案:

答案 0 :(得分:71)

仅供参考。

Maven的乐趣。

将模块的相对路径放到../pom.xml解决了它。

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

答案 1 :(得分:24)

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

答案 2 :(得分:11)

另一个原因也可能是来自存储库的父工件,它不能从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更新项目,激活配置文件并将存储库声明放回配置文件中。这是Eclipse的错误,而不是Maven bug。

答案 3 :(得分:3)

不可解析的父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 Central的一部分。 解决方案是在〜m2 /中指定一个setting.xml,以帮助生成父POM。 /Users/username/.m2/settings.xml

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

答案 4 :(得分:2)

只需添加<relativePath />,所以pom中的父项应如下所示:

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

答案 5 :(得分:1)

验证子POM中是否有正确的值

GroupId
ArtefactId
Version

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

答案 6 :(得分:1)

替换1.0_A0 同 $ {project.version}

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

答案 7 :(得分:1)

<relativePath>

如果您在子项目下进行构建,那么<relativePath>可以帮助您解决父pom。

安装父pom

但是,如果您在子项目的文件夹之外构建子项目,则<relativePath>不起作用。您可以先install将父pom放入本地存储库,然后构建子项目。

答案 8 :(得分:0)

我的工作中遇到了类似的问题。

在没有依赖项的情况下构建父项目会在.m2文件夹中创建parent_project.pom文件。

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

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

答案 9 :(得分:0)

中添加依赖项

pom.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>

答案 10 :(得分:0)

经过很长时间的尝试,我解决了这个问题,我在子模块文件目录中创建了另一个名为“ parent_pom.xml”的文件,并将该文件的本地内容粘贴到了新创建的“ parent_pom.xml”。 它对我有用,错误消息消失了。

答案 11 :(得分:0)

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

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

然后是RunAs-> Maven构建

对我有用。

答案 12 :(得分:0)

当我从.m2文件夹中删除settings.xml时,此问题已修复。

答案 13 :(得分:0)

我在父 pom 中有以下配置:

  <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。

答案 14 :(得分:-2)

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