mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-26 08:27:12 -07:00
Latest version.
This commit is contained in:
parent
811e1bceb7
commit
c57b8c96e9
2 changed files with 51 additions and 40 deletions
|
@ -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("")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue