java - Eclipse Aether 未正确解析 `LATEST`

标签 java eclipse maven kotlin aether

当我尝试解析 LATEST 版本时,Eclipse Aether 似乎没有返回正确的版本:

val artifact = DefaultArtifact("org.testng:testng:LATEST")
val versionResult = system.resolveVrsion(session, VersionRequest(artifact, repositories, null))
println(versionResult)

产生:

6.9.8 @ maven (https://jcenter.bintray.com/, default, releases+snapshots)

然而,6.9.10 是最新的,JCenter 报告正确,两者都是in the directory并且在 maven-metadata.xml 中:

<metadata>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.9.10</version>
  <versioning>
    <latest>6.9.10</latest>
    <release>6.9.10</release>

为什么我得到的是 6.9.8 而不是 6.9.10

最佳答案

有两件事可能会导致您的问题。首先,您假设 Aether 支持魔术词 LATEST,如果我没记错的话(并查看 Aether 的代码,它不受支持)。这意味着您应该使用版本范围来获取最新版本。

此外,如果您有版本范围,则需要调用 resolveVersionRange(...) 而不是 resolveVersion(..)

    String versionRange = "[0,)";

    Artifact artifact =
        new DefaultArtifact( "org.testng:testng:jar:" + versionRange );
    VersionRangeRequest rangeRequest = new VersionRangeRequest();
    rangeRequest.setArtifact( artifact );
    rangeRequest.setRepositories( remoteRepos );

    VersionRangeResult rangeResult = repository.resolveVersionRange( repositorySystemSession, rangeRequest );
    List<Version> versions = rangeResult.getVersions();

above is a slightly modified version taken from a plugin我写。还有一个ctor of DefaultArtifact which contains only the appropriate parameters这可能是一个更好的替代方法,而不是连接字符串。

关于java - Eclipse Aether 未正确解析 `LATEST`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210710/

相关文章:

java - 没有 Thread.sleep Webdriver IE 将给出 “unable to find element” 异常

android - 在代码中检查 Android API 级别

eclipse - 在 Eclipse 应用程序运行时排除 Maven 依赖

java - 从数据库更新微调器值

java - Google Appengine Java 使用哪种 JVM 语言 + Web 框架?

java - 什么是 JAXBContext.newInstance(String contextPath)?

java - 将字符串日期与今天的日期进行比较

java - 可运行的 jar 找不到库

java - ModiTect 和 Jlink 找不到模块依赖项

maven - org.apache.maven.BuildFailureException:没有提供SCM URL来执行发布