Maven:不可解析的父POM


101

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

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

1
如果有人感兴趣的话,加<relativePath>..</relativePath><parent></parent>为我工作。
kaptan

2
运行它mvn install -N & mvn install
Se Song

当期望是模块的父文件夹中的pom时,相对路径适用于不合格项目,而不是“解决方案”。
里克·奥谢

在我的情况下,这是因为pom.xml文件中存在错误。
Oleksii Kyslytsyn

总结所有可能出现的问题:stackoverflow.com/a/62704660/6172857
Sumit Badsara

Answers:


94

仅供参考。

Maven的乐趣。

将模块的相对路径放入../pom.xml即可解决此问题。

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


17
是。使用Maven要求您知道自己的所作所为,反复试验不会使您走得太远。另一方面,有几个很好的参考可用。这是一个
Nicola Musatti 2011年

6
所以你<relativePath>..</relativePath>在下面添加了这个<parent></parent>
octavian

谢谢,我尝试了一段时间解决了这个问题。我走了从../pom.xml到的相对路线../<parent folder>/pom.xml
马里奥·库兹韦

如果您指向私有存储库,则不必放置<relativePath>即可解决问题。请查看TomášZáluský的回复以获取详细说明。
Gi1ber7

我试图将主pom文件扩展到同一目录(同一项目)中的另一个文件(用于测试)。但这不能解决此错误。知道如何解决吗?
Praneeth Peiris

38

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


3
正是这样解决了我的问题,谢谢!!!但是,不是通过将其放入某个目录中,而是在“首选项-Maven-用户设置”中将Eclipse指向它。
Brain

也解决了我的问题。只需要确保设置是否正确配置以maven.repo太..
萨兰

21

另一个原因也可能是父工件来自存储库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+F5Maven Update Project,激活配置文件,然后将存储库声明放回配置文件。这是Eclipse错误,而不是Maven错误。


同样的情况!私人回购未添加到pom。
LoranceChen

4

不可解析的父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 /用户名/.m2/settings.xml

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


太棒了!在设置xml中添加我的回购详细信息是可行的。但是,为什么不从pom xml(添加了相同的repo)中提取呢?
smilyface '18

3

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

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

2
仅当父级不在同一目录结构中(即,在远程存储库中)时,这才适用。
Ondra参观Žižka

2

验证子POM中的值是否正确

GroupId
ArtefactId
Version

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


2

<relativePath>

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

安装父pom

但是,如果您从其文件夹中构建子项目, <relativePath>则无法使用。您可以install先将父pom放入本地存储库,然后再构建子项目。


1

用$ {project.version}替换1.0_A0

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


仅当所需的父POM具有与子模块的POM相同的版本时,此方法才有效。这并非总是如此。
Gerold Broser

0

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

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

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

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

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>

0

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


0

内部相对路径标签如下

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

然后运行-> Maven构建

它为我工作。


-2

我遇到的问题是,两个反应堆生成的pom.xml文件具有相同的artefactId。


就我而言,该父模块不在父文件夹中,我必须添加子模块<relativePath> ../ parent-module-dir </ relativePath>
Rolintocour
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.