maven - 版本解析异常 : Failed to resolve version RELEASE

标签 maven repository

Suddenly Maven is unable to resolve dependency with version RELEASE.

例如:-

<dependency>
            <groupId>com.google.api-ads</groupId>
            <artifactId>ads-lib</artifactId>
            <version>RELEASE</version>
</dependency>

在安装 maven 时出现以下错误:-

 Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to collect dependencies at com.google.api-ads:ads-lib:jar:RELEASE
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:291)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:316)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve(DefaultProjectDependenciesResolver.java:172)
    ... 24 more
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for com.google.api-ads:ads-lib:jar:RELEASE
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:245)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:198)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:535)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:519)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:409)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:363)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process(DefaultDependencyCollector.java:351)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)
    ... 26 more
Caused by: org.eclipse.aether.resolution.VersionResolutionException: Failed to resolve version for com.google.api-ads:ads-lib:jar:RELEASE: Could not find metadata com.google.api-ads:ads-lib/maven-metadata.xml in local (C:\Users\ashwani.kumar\.m2\repository)
    at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:300)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:231)
    ... 33 more
Caused by: org.eclipse.aether.transfer.MetadataNotFoundException: Could not find metadata com.google.api-ads:ads-lib/maven-metadata.xml in local (C:\Users\ashwani.kumar\.m2\repository)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:247)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:205)
    at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:237)
    ... 34 more

此外,我无法看到依赖项的任何发布版本 https://mvnrepository.com/artifact/com.google.api-ads/ads-lib

在进一步探索中,我找到了文章 https://www.baeldung.com/maven-dependency-latest-version

根据它:-

Deprecated Syntax

Maven2 also provided two special metaversion values to achieve the result: LATEST and RELEASE.

However, this legacy upgrade method was causing unpredictability where CI needed reproducibility. Hence, they’ve been deprecated and completely removed in Maven3:

For the sake of reproducible builds, Maven 3.x no longer supports usage of these metaversions in the POM

Is there any solution other than Versions Maven Plugin ?

最佳答案

长话短说

尝试通过 -U 更新本地元数据arg 到 Maven 命令行:

 mvn -U install

在我的例子中,maven 认为本地元数据是最新的,因此跳过了远程元数据的下载。

我在调试日志中看到了:

[DEBUG] Skipped remote request for org.dbunit:dbunit/maven-metadata.xml locally installed metadata up-to-date.

但遗憾的是,事实并非如此。本地元数据是这样的:

<metadata>
  <groupId>org.dbunit</groupId>
  <artifactId>dbunit</artifactId>
  <versioning>
    <versions>
      <version>2.7.3</version>
    </versions>
    <lastUpdated>20220811072909</lastUpdated>
  </versioning>
</metadata>

远程元数据是这样的

<metadata modelVersion="1.1.0">
    <groupId>org.dbunit</groupId>
    <artifactId>dbunit</artifactId>
    <versioning>
        <latest>2.7.3</latest>
        <release>2.7.3</release>
        <versions>
            <version>2.2</version>
            <version>2.2.1</version>
            <version>2.2.2</version>
            <version>2.2.3</version>
            <version>2.3.0</version>
            <version>2.4.0</version>
            <version>2.4.1</version>
            <version>2.4.2</version>
            <version>2.4.3</version>
            <version>2.4.4</version>
            <version>2.4.5</version>
            <version>2.4.6</version>
            <version>2.4.7</version>
            <version>2.4.8</version>
            <version>2.4.9</version>
            <version>2.5.0</version>
            <version>2.5.1</version>
            <version>2.5.2</version>
            <version>2.5.3</version>
            <version>2.5.4</version>
            <version>2.6.0</version>
            <version>2.7.0</version>
            <version>2.7.1</version>
            <version>2.7.2</version>
            <version>2.7.3</version>
        </versions>
        <lastUpdated>20220213055459</lastUpdated>
    </versioning>
</metadata>

如您所见,远程元数据包含更多版本和 <release><latest>标签。本地没有包含。

我想这就是为什么 Maven 无法检测到 RELEASE 的问题版本了。但是 LATEST即使没有<latest>,版本也能正常工作元数据中的标记。似乎 maven 看着 release标记以确定 RELEASE版本,但对于 LATEST它搜索 <versions> 的版本列表。

关于maven - 版本解析异常 : Failed to resolve version RELEASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54344527/

相关文章:

java - 使用 jar 中的拦截器绑定(bind)

maven - 如何使用 *local* 包运行 spark shell?

c# - .Net 2.0 的简单存储库

c# - 支持按分区键查询而无需更改接口(interface)的存储库

svn - 从 ".svn/pristine"文件夹中删除旧的 SVN 文件

java - Maven 的子模块依赖关系

java - 无法执行目标 org.springframework.boot :spring-boot-maven-plugin:2. 1.12.RELEASE:run (default-cli)

java - xml 在另一个 xml 中导入——这是如何进入 war 的?

linux - 列出子文件夹中的本地 git repos

java - 如何在 JPARepository 中编写内连接查询