1

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

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在目录和以下目录中都正确报告了它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

4

1 回答 1

3

有两件事可能导致您的问题。首先,您假设LATESTAether 支持魔法词,如果我没记错的话(并且查看 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();

以上是从我编写的插件中获取的稍微修改的版本。还有一个DefaultArtifact 的 ctor,它只包含适当的参数,这可能是一个更好的替代方法,而不是连接字符串。

于 2016-03-25T10:47:32.763 回答