当我尝试解析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
? 最佳答案
有两件事可能是造成问题的原因。首先,您假设魔术字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,它可能是代替串联字符串的更好替代方法。