【问题标题】:Maven: Non-resolvable parent POMMaven:不可解析的父 POM
【发布时间】:2011-11-28 13:33:04
【问题描述】:

我的 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 替换为它是什么模块。

让他们都在他们的 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>

【问题讨论】:

  • 如果有人感兴趣,在&lt;parent&gt;&lt;/parent&gt; 下添加&lt;relativePath&gt;..&lt;/relativePath&gt; 对我有用。
  • 运行这个mvn install -N &amp; mvn install
  • 当期望模块的父文件夹中的 pom 应该可以访问时,相对路径用于不合格项目而不是“解决方案”。
  • 在我的情况下,这是因为 pom.xml 文件中的输入错误。
  • 总结所有可能的问题:stackoverflow.com/a/62704660/6172857

标签: maven module build-automation parent-child


【解决方案1】:

仅供参考。

Maven 的乐趣。

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

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

【讨论】:

  • 是的。使用 Maven 要求您知道自己在做什么,反复试验不会让您走得太远。另一方面,有几个很好的参考资料可供参考。这是one
  • 所以你在&lt;parent&gt;&lt;/parent&gt;下添加了这个&lt;relativePath&gt;..&lt;/relativePath&gt;
  • 谢谢 我试了一段时间解决了这个问题。我采用了从../pom.xml../&lt;parent folder&gt;/pom.xml 的相对路径。
  • 如果您指向私有存储库,则放置 不一定能解决问题。查看 Tomáš Záluský 的回复以获取详细说明。
  • 我正在尝试将我的主 pom 文件扩展到同一目录(同一项目)中的另一个(用于测试)。但这并不能解决这个错误。知道如何解决吗?
【解决方案2】:

另一种原因也可能是父工件来自无法从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,问题更加复杂:存储库仅在特殊配置文件 (&lt;profiles&gt;&lt;profile&gt;&lt;id&gt;activate-private-repo&lt;/id&gt;&lt;repositories&gt;...) 中处于活动状态,并且 Eclipse 中的 Maven GUI 不允许通过 Ctrl+Alt+P 快捷方式设置此配置文件。

解决方案是临时声明存储库外部配置文件(无条件),启动Alt+F5 Maven 更新项目,激活配置文件并将存储库声明放回配置文件。这是 Eclipse 错误,而不是 Maven 错误。

【讨论】:

  • 同样的情况!私人仓库未添加到 pom 中。
【解决方案3】:

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

【讨论】:

  • 正好解决了我的问题,谢谢!!!但不是将其放入某个目录,而是在 Preferences - Maven - User Settings 中将 Eclipse 指向它。
  • 也解决了我的问题。只需确保设置也正确配置为maven.repo..
  • 我删除了 stting.xml 文件并修复了。
【解决方案4】:

验证子 POM 中的值是否正确

GroupId
ArtefactId
Version

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

【讨论】:

    【解决方案5】:

    替换 1.0_A0 和 ${project.version}

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

    【讨论】:

    • 这仅在所需的父 POM 与子模块的 POM 具有相同版本时才有效。情况并非总是如此。
    【解决方案6】:

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

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

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

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

    【讨论】:

    • 您的回答与 一起为我解决了这个问题。 *relativePath 单独没有。
    【解决方案7】:

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

    【讨论】:

    • 在我的情况下,这个父模块不在父文件夹中,我必须在子模块中添加 ../parent-module-dir
    【解决方案8】:

    只需添加&lt;relativePath /&gt;,因此 pom 中的父级应如下所示:

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

    【讨论】:

    • 这仅适用于父级不在同一个目录结构中的情况,即在远程存储库中。
    【解决方案9】:

    不可解析的父 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:
    

    因为父 repo 不是 maven 中心的一部分。 解决方案是在 ~m2/ 中指定一个 setting.xml 以帮助生成父 POM。 /Users/用户名/.m2/settings.xml

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

    【讨论】:

    • 太棒了!在设置 xml 中添加我的回购详细信息有效。但是为什么它不从 pom xml 中获取(其中添加了相同的 repo)?
    • 什么样的细节?你能描述一下吗?
    【解决方案10】:

    &lt;relativePath&gt;

    如果你在子项目下构建,那么&lt;relativePath&gt;可以帮你解决父pom。

    安装父 pom

    但如果您从其文件夹中构建子项目,&lt;relativePath&gt; 将不起作用。您可以先将父 pom install 放入本地仓库,然后再构建子项目。

    【讨论】:

      【解决方案11】:

      中添加依赖

      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>
      

      【讨论】:

        【解决方案12】:

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

        【讨论】:

          【解决方案13】:

          在相对路径标签里面做如下操作

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

          然后 RunAs-> Maven 构建

          它对我有用。

          【讨论】:

          • 你在哪里找到亲戚?不允许 relativePath 之间的相对关系
          【解决方案14】:

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

          【讨论】:

          • 你是怎么解决的?你做了什么,你还记得吗?
          【解决方案15】:

          我在父 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”错误。我将版本更改为&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;,它消失了。

          Apache Maven 3.6.3。

          【讨论】:

            【解决方案16】:

            在这种情况下,找不到父工件。正如其他人指出的那样,将 &lt;relativePath/&gt; 添加到您引用本地无法找到的父级的 pom 中可能会起作用。但是为什么会起作用

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

            正如他们解释的那样here

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

            在这种情况下,您需要在 WSL2 的 .m2 目录中创建 settings.xml 或创建对它的引用,例如通过符号链接。 (这是一个不同的问题,但可以像 this 一样解决。)

            【讨论】:

              【解决方案17】:

              除了Luke Willisanswer,看起来像这样:

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

              【讨论】:

                猜你喜欢
                • 2021-11-16
                • 2013-11-14
                • 2020-04-18
                • 2023-03-05
                • 2016-10-25
                • 2023-04-01
                • 2022-11-24
                • 2022-01-07
                • 2016-07-26
                相关资源
                最近更新 更多