Maven:无法解析的父POM

151

我的Maven项目设置为一个shell项目和四个子模块。当我尝试构建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替换为任何其他模块即可。

让它们在它们的pom文件中都引用父级。

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

2
如果有人感兴趣,可以在<parent></parent>下添加<relativePath>..</relativePath>,这对我有效。 - kaptan
2
运行以下命令:mvn install -N&mvn install - Se Song
1
相对路径适用于不符合规范的项目,但如果期望在模块的父文件夹中有一个pom文件可访问,那么它不是一个“解决方案”。 - Rick O'Shea
在我的情况下,是因为 pom.xml 文件中输入错误导致的。 - Oleksii Kyslytsyn
所有可能的问题总结如下:https://dev59.com/e2Ij5IYBdhLWcg3wHhz_#62704660 - Sumit Badsara
我尝试安装mvn install,但终端显示“'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件。” - Manghud
20个回答

129

仅供参考。

Maven的乐趣。

通过将模块的相对路径放置到../pom.xml中解决了问题。

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


21
是的。使用Maven需要知道你在做什么,试错并不能让你走得很远。另一方面,有几个好的参考资料可用。这是其中之一:链接 - Nicola Musatti
9
所以你在<parent></parent>下面添加了这个<relativePath>..</relativePath> - bsky
1
谢谢,我尝试了一段时间来解决问题。我使用相对路径从 ../pom.xml../<父文件夹>/pom.xml - Mario Kurzweil
1
如果您指向私有存储库,则添加<relativePath>可能无法解决问题。请查看Tomáš Záluský的回复以获取详细说明。 - Gi1ber7
我正在尝试将我的主POM文件扩展到同一目录(同一项目)中的另一个文件(用于测试)。但这并不能解决这个错误。有什么想法如何修复它? - Praneeth Peiris

55

将正确的 settings.xml 文件放置到 ~/.m2/ 目录中也可以解决此问题。


4
确切地说,这解决了我的问题,谢谢!但是不是把它放入某个目录中,而是在“首选项 - Maven - 用户设置”中指向它,这样做才有效。 - Brain
我的问题也解决了。只需要确保设置正确配置为 maven.repo 即可。 - Saran
我删除了stting.xml文件并进行了修复。 - menoktaokan

28

另一个可能的原因是父级构件来自于仓库,该仓库无法从 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。


同样的情况!私有仓库没有被添加到POM文件中。 - LoranceChen

9
只需添加<relativePath />,那么pom文件中的父级应该如下所示:
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath />
    </parent>

5
只有当父目录不在相同的目录结构中,即在远程仓库中时,此规则才适用。 - Ondra Žižka

7

无法解析的父 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/中指定一个setting.xml来帮助解决父POM。/Users/username/.m2/settings.xml

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


太棒了!在设置的xml中添加我的repo详细信息起作用了。但是为什么它不从pom xml中获取(其中也添加了相同的repo)? - smilyface
3
需要哪些细节?你能描述一下吗? - menoktaokan

4

<relativePath>

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

安装父 POM

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


3

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

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

3

当我从 .m2 文件夹中移除 settings.xml 文件时,问题被解决了。


2
你是怎么修复的?你做了什么,还记得吗? - menoktaokan

2

验证子POM中的值是否正确

GroupId
ArtefactId
Version

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

2

我在父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。


这是我的问题。在我看来,这似乎是一个 bug,但即使在 Maven 3.8.4 中也不能将 ${revision} 用作父级的版本,并在本地解决它。 - Tony the Tech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接