当我尝试解析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 directorymaven-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

最佳答案

有两件事可能是造成问题的原因。首先,您假设魔术字LATEST受Aether支持,并且如果我没有记错的话(并查看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,它可能是代替串联字符串的更好替代方法。

07-28 12:06