Maven:不可解析的父 POM 和“parent.relativePath”指向错误的本地 POM

Posted

技术标签:

【中文标题】Maven:不可解析的父 POM 和“parent.relativePath”指向错误的本地 POM【英文标题】:Maven:Non-resolvable parent POM and 'parent.relativePath' points at wrong local POM 【发布时间】:2016-07-26 19:58:00 【问题描述】:

我正在使用 maven 3 运行应用程序,但出现以下错误:

[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM: Failure to find com.topdesk:tis-parent:pom:3.
4 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 3, column 11
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:416)
at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:663)
    at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:654)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:243)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
[ERROR]
[ERROR]   The project com.topdesk.test.junitcategorizer:junitcategorizer:0.0.1-SNAPSHOT (D:\Masters\thesis related papers and tools\junitcategorizer\pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Failure to find com.topdesk:tis-parent:pom:3.4 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM@ line 3, column 11 -> [Help 2]org.apache.maven.model.resolution.UnresolvableModelException: Failure to find com.topdesk:tis-parent:pom:3.4 in https://repo.maven.apache.org/maven2 was cachedin the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:187)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:236)
    at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultodelBuilder.java:898)
    at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:750)
    at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:309)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:463)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:432)
    at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:396)
    at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:663)
    at org.apache.maven.DefaultMaven.getProjectsForMavenReactor(DefaultMaven.java:654)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:243)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Failure to find com.topdesk:tis-parent:pom:3.4 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:295)
    at org.apache.maven.project.ProjectModelResolver.resolveModel(ProjectModelResolver.java:183)
    ... 22 more
Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Failure to find com.topdesk:tis-parent:pom:3.4 in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.newException(DefaultUpdateCheckManager.java:232)
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkArtifact(DefaultUpdateCheckManager.java:206)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.gatherDownloads(DefaultArtifactResolver.java:599)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:518)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:436)
    ... 26 more

我有以下父 pom 文件(其中的一部分):

<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.topdesk</groupId>
<artifactId>tis-parent</artifactId>
<version>3.4</version>
</parent>

<groupId>com.topdesk.test.junitcategorizer</groupId>
<artifactId>junitcategorizer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>JUnitCategorizer</name>

<modules>
<module>junitcategorizer.instrument</module>
<module>junitcategorizer.examples</module>
<module>junitcategorizer.reporter.maven</module>
<module>junitcategorizer.reporter.maven.site</module>
<module>junitcategorizer.cutdetection</module>
</modules>
<organization>
    <name>TOP Informatie Systemen bv</name>
    <url>http://www.topdesk.com/</url>
</organization>

<properties>
    <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>utf-8</project.reporting.outputEncoding>
    <surefire.version>2.12</surefire.version>
</properties>

<prerequisites>
    <maven>3.0</maven>
</prerequisites>

我有以下子模块 pom 文件:

 <modelVersion>4.0.0</modelVersion>
 <parent>
<artifactId>junitcategorizer</artifactId>
<groupId>com.topdesk.test.junitcategorizer</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>junitcategorizer.cutdetection</artifactId>
<name>Analysis of parameters for the CUT detection algorithm</name>
<description>Analysis of parameters for the CUT detection algorithm</description>
<dependencies>
<dependency>
    <groupId>com.topdesk.test.junitcategorizer</groupId>
    <artifactId>junitcategorizer.instrument</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

我尝试在父 pom 文件中注释以下部分(我不知道这样做是否正确),然后这个错误消失了,构建失败并出现 this 错误。

<parent>
<groupId>com.topdesk</groupId>
<artifactId>tis-parent</artifactId>
<version>3.4</version>
</parent>

请帮帮我!

谢谢

【问题讨论】:

它抱怨的是它找不到com.topdesk:tis-parent(或者至少不是它的正确版本)。您在父 pom 中指定 tis-parent 作为您父母的父 pom。问题是这是否是你想要做的。实际上tis-parentjunitcategorizer 的父级吗?如果是,那么您需要弄清楚为什么找不到它。如果它不是正确的父级,则应将其删除或替换为正确的父级。 我从公司删除了tis-parent,所以现在这个错误消失了,但我仍然有this。 这是一个不同的错误。您应该在那个问题中查看Stefan Iseles answer! 总结所有可能的问题:***.com/a/62704660/6172857 【参考方案1】:

在 Windows 上使用 Maven 3.8.3,我通过显式指定父 pom.xml (../pom.xml) 的相对路径没有问题,即:

<parent>
    <groupId>org.example</groupId>
    <artifactId>example</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

唯一让我失望的是那些误导性的文档。

引用Maven source 关于relativePath

检出中父 pom.xml 文件的相对路径。默认值为../pom.xml。 [...]

现在,虽然文档指出 ../pom.xml 应该是默认值,但将 &lt;relativePath&gt;../pom.xml&lt;/relativePath&gt; 替换为 &lt;relativePath/&gt; 会产生问题中报告的错误。

【讨论】:

【参考方案2】:

将以下内容添加到pom.xml 将解决该问题:

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

【讨论】:

【参考方案3】:

我可能有点迟到了,但我为我在 TOPdesk 的论文项目编写了 junitcategorizer。早期版本确实使用了公司内部的 Parent POM。因此,您的问题是由 Parent POM 无法解决引起的,因为它对外界不可用。

您可以:

删除&lt;parent&gt; 块,但必须自己配置 Surefire、Compiler 和其他插件 (仅适用于这种特定情况!) 通过设置将其更改为指向我们的开源父 POM:
<parent>
    <groupId>com.topdesk</groupId>
    <artifactId>open-source-parent</artifactId>
    <version>1.2.0</version>
</parent>

【讨论】:

【参考方案4】:

所以就我而言,在尝试了上述所有选项后,我意识到它是 ***(公司防火墙)。一旦连接并运行 cmd: clean install spring-boot:run。问题已解决。 第1步:检查maven是否配置正确。 第 2 步:检查 settings.xml 是否映射正确。 第 3 步:验证您是否位于任何防火墙之后,然后相应地映射您的 repo url。 第 4 步:运行全新安装 spring-boot:运行 第 5 步:问题已解决。

【讨论】:

【参考方案5】:

java 版本有冲突。使用 1.8 for maven 后解决。

【讨论】:

【参考方案6】:

你可以试试下面的方法,

 <parent>
    <groupId></groupId>
    <artifactId></artifactId>
    <version></version>
  </parent>

这样父 jar 将从存储库中获取。

【讨论】:

【参考方案7】:

maven 多模块项目的正常布局是:

parent
├── pom.xml
├── module
    ├── pom.xml

检查您是否使用此布局。

另外:

    relativePath 看起来很奇怪。而不是'..'

    <relativePath>..</relativePath>
    

    尝试使用 '../' 代替:

    <relativePath>../</relativePath>
    

    如果您使用标准布局,您也可以删除relativePath。这是我一直在做的事情,在命令行上我也可以构建父模块(和所有模块)或仅构建单个模块。

    模块路径可能错误。在父级中,您将模块定义为:

    <module>junitcategorizer.cutdetection</module>
    

    您必须指定子模块的文件夹名称,而不是工件标识符。如果junitcategorizer.cutdetection 不是文件夹的名称,则相应地更改它。

希望对您有所帮助..

编辑看看其他帖子,我在那里回答。

【讨论】:

感谢您的建议!但现在我修改了父 pom 文件,所以这个错误消失了,但构建失败并出现 this 错误..

以上是关于Maven:不可解析的父 POM 和“parent.relativePath”指向错误的本地 POM的主要内容,如果未能解决你的问题,请参考以下文章

使用 Maven 3.0.3 和 relativePath 表示法的不可解析的父 POM

Maven 子项目 - 不可解析的父 POM

尝试使用 $parent.groupid 从子 pom 引用父 pom 时出现“不可解析的父 POM:无法传输工件”

不可解析的父 POM,尽管 relativePath 设置为现有的父 pom.xml

项目构建错误:不可解析的父 POM

Eclipse 中不可解析的父 POM