mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-27 08:38:13 -07:00
Make Aether a singleton.
This way I can actually use its cache of dependencies that were already looked up.
This commit is contained in:
parent
250b777d6e
commit
c361a30614
2 changed files with 12 additions and 10 deletions
|
@ -3,6 +3,7 @@ package com.beust.kobalt.maven.aether
|
||||||
import com.beust.kobalt.KobaltException
|
import com.beust.kobalt.KobaltException
|
||||||
import com.beust.kobalt.api.IClasspathDependency
|
import com.beust.kobalt.api.IClasspathDependency
|
||||||
import com.beust.kobalt.api.Kobalt
|
import com.beust.kobalt.api.Kobalt
|
||||||
|
import com.beust.kobalt.homeDir
|
||||||
import com.beust.kobalt.internal.KobaltSettings
|
import com.beust.kobalt.internal.KobaltSettings
|
||||||
import com.beust.kobalt.internal.KobaltSettingsXml
|
import com.beust.kobalt.internal.KobaltSettingsXml
|
||||||
import com.beust.kobalt.maven.CompletedFuture
|
import com.beust.kobalt.maven.CompletedFuture
|
||||||
|
@ -15,6 +16,7 @@ import com.google.common.cache.CacheBuilder
|
||||||
import com.google.common.cache.CacheLoader
|
import com.google.common.cache.CacheLoader
|
||||||
import com.google.common.cache.LoadingCache
|
import com.google.common.cache.LoadingCache
|
||||||
import com.google.inject.Inject
|
import com.google.inject.Inject
|
||||||
|
import com.google.inject.Singleton
|
||||||
import org.eclipse.aether.artifact.Artifact
|
import org.eclipse.aether.artifact.Artifact
|
||||||
import org.eclipse.aether.artifact.DefaultArtifact
|
import org.eclipse.aether.artifact.DefaultArtifact
|
||||||
import org.eclipse.aether.collection.CollectRequest
|
import org.eclipse.aether.collection.CollectRequest
|
||||||
|
@ -33,7 +35,7 @@ import java.util.concurrent.Future
|
||||||
|
|
||||||
class DependencyResult(val dependency: IClasspathDependency, val repoUrl: String)
|
class DependencyResult(val dependency: IClasspathDependency, val repoUrl: String)
|
||||||
|
|
||||||
class KobaltAether @Inject constructor (val settings: KobaltSettings) {
|
class KobaltAether @Inject constructor (val settings: KobaltSettings, val aether: Aether) {
|
||||||
val localRepo: File get() = File(settings.localRepo)
|
val localRepo: File get() = File(settings.localRepo)
|
||||||
|
|
||||||
class MaybeArtifact(val result: DependencyResult?, val error: String?)
|
class MaybeArtifact(val result: DependencyResult?, val error: String?)
|
||||||
|
@ -49,7 +51,6 @@ class KobaltAether @Inject constructor (val settings: KobaltSettings) {
|
||||||
* Create an IClasspathDependency from a Kobalt id.
|
* Create an IClasspathDependency from a Kobalt id.
|
||||||
*/
|
*/
|
||||||
fun create(id: String): IClasspathDependency {
|
fun create(id: String): IClasspathDependency {
|
||||||
val aether = Aether(localRepo)
|
|
||||||
val cr = aether.transitiveDependencies(DefaultArtifact(MavenId.toKobaltId(id)))
|
val cr = aether.transitiveDependencies(DefaultArtifact(MavenId.toKobaltId(id)))
|
||||||
return if (cr != null) AetherDependency(cr.root.artifact)
|
return if (cr != null) AetherDependency(cr.root.artifact)
|
||||||
else throw KobaltException("Couldn't resolve $id")
|
else throw KobaltException("Couldn't resolve $id")
|
||||||
|
@ -59,7 +60,7 @@ class KobaltAether @Inject constructor (val settings: KobaltSettings) {
|
||||||
* @return the latest artifact for the given group and artifactId.
|
* @return the latest artifact for the given group and artifactId.
|
||||||
*/
|
*/
|
||||||
fun latestArtifact(group: String, artifactId: String, extension: String = "jar") : DependencyResult
|
fun latestArtifact(group: String, artifactId: String, extension: String = "jar") : DependencyResult
|
||||||
= Aether(localRepo).latestArtifact(group, artifactId, extension).let {
|
= aether.latestArtifact(group, artifactId, extension).let {
|
||||||
DependencyResult(AetherDependency(it.artifact), it.repository.toString())
|
DependencyResult(AetherDependency(it.artifact), it.repository.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ class KobaltAether @Inject constructor (val settings: KobaltSettings) {
|
||||||
*/
|
*/
|
||||||
private fun doResolve(id: String): MaybeArtifact {
|
private fun doResolve(id: String): MaybeArtifact {
|
||||||
log(3, "Resolving $id")
|
log(3, "Resolving $id")
|
||||||
val results = Aether(localRepo).resolve(DefaultArtifact(MavenId.toKobaltId(id)))
|
val results = aether.resolve(DefaultArtifact(MavenId.toKobaltId(id)))
|
||||||
if (results != null && results.size > 0) {
|
if (results != null && results.size > 0) {
|
||||||
return MaybeArtifact(
|
return MaybeArtifact(
|
||||||
DependencyResult(AetherDependency(results[0].artifact), results[0].repository.toString()),
|
DependencyResult(AetherDependency(results[0].artifact), results[0].repository.toString()),
|
||||||
|
@ -95,6 +96,7 @@ class ExcludeOptionalDependencyFilter: DependencyFilter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Singleton
|
||||||
class Aether(val localRepo: File) {
|
class Aether(val localRepo: File) {
|
||||||
private val system = Booter.newRepositorySystem()
|
private val system = Booter.newRepositorySystem()
|
||||||
private val session = Booter.newRepositorySystemSession(system, localRepo)
|
private val session = Booter.newRepositorySystemSession(system, localRepo)
|
||||||
|
@ -176,9 +178,7 @@ class Aether(val localRepo: File) {
|
||||||
}
|
}
|
||||||
|
|
||||||
class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable<AetherDependency> {
|
class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable<AetherDependency> {
|
||||||
val settings : KobaltSettings get() = Kobalt.INJECTOR.getInstance(KobaltSettings::class.java)
|
val aether: Aether get() = Kobalt.INJECTOR.getInstance(Aether::class.java)
|
||||||
val localRepo : File get() = File(settings.localRepo)
|
|
||||||
val aether: Aether get() = Aether(localRepo)
|
|
||||||
|
|
||||||
constructor(node: DependencyNode) : this(node.artifact) {}
|
constructor(node: DependencyNode) : this(node.artifact) {}
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable
|
||||||
if (td?.root?.artifact?.file != null) {
|
if (td?.root?.artifact?.file != null) {
|
||||||
CompletedFuture(td!!.root.artifact.file)
|
CompletedFuture(td!!.root.artifact.file)
|
||||||
} else {
|
} else {
|
||||||
val resolved = Aether(localRepo).resolve(artifact)
|
val resolved = aether.resolve(artifact)
|
||||||
if (resolved != null && resolved.size > 0) {
|
if (resolved != null && resolved.size > 0) {
|
||||||
CompletedFuture(resolved[0].artifact.file)
|
CompletedFuture(resolved[0].artifact.file)
|
||||||
} else {
|
} else {
|
||||||
|
@ -220,7 +220,6 @@ class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable
|
||||||
override fun directDependencies() : List<IClasspathDependency> {
|
override fun directDependencies() : List<IClasspathDependency> {
|
||||||
val result = arrayListOf<IClasspathDependency>()
|
val result = arrayListOf<IClasspathDependency>()
|
||||||
val deps = aether.directDependencies(artifact)
|
val deps = aether.directDependencies(artifact)
|
||||||
val td = aether.transitiveDependencies(artifact)
|
|
||||||
if (deps != null) {
|
if (deps != null) {
|
||||||
if (! deps.root.dependency.optional) {
|
if (! deps.root.dependency.optional) {
|
||||||
deps.root.children.forEach {
|
deps.root.children.forEach {
|
||||||
|
@ -252,7 +251,7 @@ class AetherDependency(val artifact: Artifact): IClasspathDependency, Comparable
|
||||||
fun main(argv: Array<String>) {
|
fun main(argv: Array<String>) {
|
||||||
KobaltLogger.LOG_LEVEL = 1
|
KobaltLogger.LOG_LEVEL = 1
|
||||||
val id = "org.testng:testng:6.9.11"
|
val id = "org.testng:testng:6.9.11"
|
||||||
val aether = KobaltAether(KobaltSettings(KobaltSettingsXml()))
|
val aether = KobaltAether(KobaltSettings(KobaltSettingsXml()), Aether(File(homeDir(".aether"))))
|
||||||
val r = aether.resolve(id)
|
val r = aether.resolve(id)
|
||||||
val r2 = aether.resolve(id)
|
val r2 = aether.resolve(id)
|
||||||
val d = org.eclipse.aether.artifact.DefaultArtifact("org.testng:testng:6.9")
|
val d = org.eclipse.aether.artifact.DefaultArtifact("org.testng:testng:6.9")
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.beust.kobalt.internal.PluginInfo
|
||||||
import com.beust.kobalt.maven.LocalRepo
|
import com.beust.kobalt.maven.LocalRepo
|
||||||
import com.beust.kobalt.maven.Pom
|
import com.beust.kobalt.maven.Pom
|
||||||
import com.beust.kobalt.maven.PomGenerator
|
import com.beust.kobalt.maven.PomGenerator
|
||||||
|
import com.beust.kobalt.maven.aether.Aether
|
||||||
import com.beust.kobalt.misc.DependencyExecutor
|
import com.beust.kobalt.misc.DependencyExecutor
|
||||||
import com.beust.kobalt.misc.KobaltExecutors
|
import com.beust.kobalt.misc.KobaltExecutors
|
||||||
import com.beust.kobalt.plugin.publish.BintrayApi
|
import com.beust.kobalt.plugin.publish.BintrayApi
|
||||||
|
@ -14,6 +15,7 @@ import com.google.inject.Provider
|
||||||
import com.google.inject.Singleton
|
import com.google.inject.Singleton
|
||||||
import com.google.inject.TypeLiteral
|
import com.google.inject.TypeLiteral
|
||||||
import com.google.inject.assistedinject.FactoryModuleBuilder
|
import com.google.inject.assistedinject.FactoryModuleBuilder
|
||||||
|
import java.io.File
|
||||||
import java.util.concurrent.ExecutorService
|
import java.util.concurrent.ExecutorService
|
||||||
|
|
||||||
public open class MainModule(val args: Args, val settings: KobaltSettings) : AbstractModule() {
|
public open class MainModule(val args: Args, val settings: KobaltSettings) : AbstractModule() {
|
||||||
|
@ -50,6 +52,7 @@ public open class MainModule(val args: Args, val settings: KobaltSettings) : Abs
|
||||||
bind(KobaltSettings::class.java).toProvider(Provider<KobaltSettings> {
|
bind(KobaltSettings::class.java).toProvider(Provider<KobaltSettings> {
|
||||||
settings
|
settings
|
||||||
}).`in`(Singleton::class.java)
|
}).`in`(Singleton::class.java)
|
||||||
|
bind(Aether::class.java).toInstance(Aether(File(settings.localRepo)))
|
||||||
|
|
||||||
// bindListener(Matchers.any(), object: TypeListener {
|
// bindListener(Matchers.any(), object: TypeListener {
|
||||||
// override fun <I> hear(typeLiteral: TypeLiteral<I>?, typeEncounter: TypeEncounter<I>?) {
|
// override fun <I> hear(typeLiteral: TypeLiteral<I>?, typeEncounter: TypeEncounter<I>?) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue