1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Latest version.

This commit is contained in:
Cedric Beust 2016-03-25 10:03:34 +04:00
parent 811e1bceb7
commit c57b8c96e9
2 changed files with 51 additions and 40 deletions

View file

@ -4,7 +4,7 @@ import com.beust.kobalt.api.IClasspathDependency
import com.beust.kobalt.maven.LocalRepo
import com.beust.kobalt.maven.MavenId
import com.beust.kobalt.maven.RepoFinder
import com.beust.kobalt.maven.dependency.MavenDependency
import com.beust.kobalt.maven.aether.KobaltAether
import com.beust.kobalt.misc.KobaltExecutors
import com.beust.kobalt.misc.Node
import com.beust.kobalt.misc.log
@ -16,8 +16,8 @@ import java.util.*
*/
class ResolveDependency @Inject constructor(val repoFinder: RepoFinder,
val localRepo: LocalRepo,
val executors: KobaltExecutors,
val mdFactory: MavenDependency.IFactory) {
val aether: KobaltAether,
val executors: KobaltExecutors) {
val increment = 8
val leftFirst = "\u2558"
val leftMiddle = "\u255f"
@ -29,28 +29,21 @@ class ResolveDependency @Inject constructor(val repoFinder: RepoFinder,
fun run(ids: List<String>) = ids.forEach { displayDependenciesFor(it) }
private fun displayDependenciesFor(id: String) {
val repoResult = repoFinder.findCorrectRepo(id)
val mavenId = MavenId.create(id)
val resolved =
if (mavenId.hasVersion) aether.resolve(id)
else aether.latestArtifact(mavenId.groupId, mavenId.artifactId)
displayDependencies(resolved.dependency, resolved.repoUrl)
}
private fun displayDependencies(dep: IClasspathDependency, url: String) {
val indent = -1
val originalId = MavenId.create(id)
val mavenId = MavenId.create(originalId.groupId, originalId.artifactId, originalId.packaging,
originalId.version)
val originalDep = mdFactory.create(mavenId, executors.dependencyExecutor,
downloadSources = true, downloadJavadocs = true)
val packaging = if (mavenId.packaging != null) "@" + mavenId.packaging else ""
// We want to display the dependencies of the id we found, not the one we queries
val dep = mdFactory.create(MavenId.create(originalDep.shortId + repoResult.version + packaging),
executors.dependencyExecutor, true, true)
val root = Node(Dep(dep, indent))
val seen = hashSetOf(id)
val seen = hashSetOf(dep.id)
root.addChildren(findChildren(root, seen))
val url = repoResult.hostConfig.url + repoResult.path
val localFile = localRepo.toFullPath(repoResult.path!!)
AsciiArt.logBox(listOf(id, url, localFile).map { " $it" }, {s -> println(s) })
AsciiArt.logBox(listOf(dep.id, url, dep.jarFile.get()).map { " $it" }, {s -> println(s) })
display(root.children)
println("")

View file

@ -27,6 +27,8 @@ import java.util.concurrent.Future
val TEST_DIR = ".aether/repository"
class DependencyResult(val dependency: IClasspathDependency, val repoUrl: String)
class KobaltAether(val localRepo: File = File(homeDir(TEST_DIR))) {
fun create(id: String): IClasspathDependency {
val aether = Aether(localRepo)
@ -34,6 +36,20 @@ class KobaltAether(val localRepo: File = File(homeDir(TEST_DIR))) {
return if (cr != null) AetherDependency(cr.root.artifact)
else throw KobaltException("Couldn't resolve $id")
}
fun latestArtifact(group: String, artifactId: String, extension: String = "jar") : DependencyResult
= Aether(localRepo).latestArtifact(group, artifactId, extension).let {
DependencyResult(AetherDependency(it.artifact), it.repository.toString())
}
fun resolve(id: String): DependencyResult {
val results = Aether(localRepo).resolve(DefaultArtifact(id))
if (results != null && results.size > 0) {
return DependencyResult(AetherDependency(results[0].artifact), results[0].repository.toString())
} else {
throw KobaltException("Couldn't resolve $id")
}
}
}
class ExcludeOptionalDependencyFilter: DependencyFilter {
@ -68,6 +84,23 @@ class Aether(val localRepo: File = File(homeDir(TEST_DIR))) {
}
}
fun latestArtifact(group: String, artifactId: String, extension: String = "jar") : ArtifactResult {
val artifact = DefaultArtifact(group, artifactId, extension, "(0,]")
val resolved = resolveVersion(artifact)
if (resolved != null) {
val newArtifact = DefaultArtifact(artifact.groupId, artifact.artifactId, artifact.extension,
resolved.highestVersion.toString())
val artifactResult = resolve(newArtifact)
if (artifactResult != null) {
return artifactResult[0]
} else {
throw KobaltException("Couldn't find latest artifact for $group:$artifactId")
}
} else {
throw KobaltException("Couldn't find latest artifact for $group:$artifactId")
}
}
fun resolveVersion(artifact: Artifact): VersionRangeResult? {
val metadata = DefaultMetadata(artifact.groupId, artifact.artifactId, "maven-metadata.xml",
org.eclipse.aether.metadata.Metadata.Nature.RELEASE)
@ -105,11 +138,8 @@ class Aether(val localRepo: File = File(homeDir(TEST_DIR))) {
fun transitiveDependencies(artifact: Artifact) = directDependencies(artifact)
fun directDependencies(artifact: Artifact): CollectResult? {
val result = system.collectDependencies(session, collectRequest(artifact))
val root = result.root
return result
}
fun directDependencies(artifact: Artifact): CollectResult?
= system.collectDependencies(session, collectRequest(artifact))
}
class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable<AetherDependency> {
@ -183,19 +213,7 @@ class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable
fun main(argv: Array<String>) {
KobaltLogger.LOG_LEVEL = 2
val aether = Aether()
val artifact = DefaultArtifact("org.testng:testng:(0,]")
aether.resolveVersion(artifact)?.let { versionResult ->
println("Latest version: " + versionResult + " " + versionResult.highestVersion)
println("")
// val newArtifact = DefaultArtifact(artifact.groupId, artifact.artifactId, artifact.extension,
// versionResult.highestVersion)
// val artifactResult = aether.resolve(newArtifact)
// println(" File: " + artifactResult)
}
val d2 = Aether().resolve(artifact)
// val dd = Aether().resolve("org.testng:testng:6.9.9")
// val artifact = d2?.root?.artifact
if (d2 != null && d2.size > 0) {
println("DD: " + d2)
}
val latestResult = aether.latestArtifact("org.testng", "testng")
val latest = latestResult.artifact
println("Latest: " + latest.version + " " + latest.file)
}