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

Remove unused Aether code.

This commit is contained in:
Cedric Beust 2017-02-07 10:27:24 -08:00
parent f037474f36
commit 9286265f0d
4 changed files with 4 additions and 274 deletions

View file

@ -1,37 +1,17 @@
package com.beust.kobalt.maven.aether package com.beust.kobalt.maven.aether
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.api.Project import com.beust.kobalt.api.Project
import com.beust.kobalt.internal.KobaltSettings
import com.beust.kobalt.internal.getProxy
import com.beust.kobalt.maven.CompletedFuture import com.beust.kobalt.maven.CompletedFuture
import com.beust.kobalt.maven.LocalDep import com.beust.kobalt.maven.LocalDep
import com.beust.kobalt.maven.LocalRepo import com.beust.kobalt.maven.LocalRepo
import com.beust.kobalt.maven.MavenId import com.beust.kobalt.maven.MavenId
import com.beust.kobalt.misc.Versions import com.beust.kobalt.misc.Versions
import com.beust.kobalt.misc.kobaltLog
import com.beust.kobalt.misc.warn import com.beust.kobalt.misc.warn
import com.google.common.eventbus.EventBus
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.collection.CollectRequest
import org.eclipse.aether.collection.CollectResult
import org.eclipse.aether.graph.Dependency
import org.eclipse.aether.graph.DependencyFilter
import org.eclipse.aether.repository.ArtifactRepository
import org.eclipse.aether.repository.RemoteRepository
import org.eclipse.aether.resolution.DependencyRequest
import org.eclipse.aether.resolution.DependencyResolutionException
import org.eclipse.aether.resolution.VersionRangeRequest
import org.eclipse.aether.resolution.VersionRangeResult
import org.eclipse.aether.transfer.ArtifactNotFoundException
import org.eclipse.aether.util.artifact.JavaScopes import org.eclipse.aether.util.artifact.JavaScopes
import java.io.File import java.io.File
import java.util.*
import java.util.concurrent.Future import java.util.concurrent.Future
enum class Scope(val scope: String, val dependencyLambda: (Project) -> List<IClasspathDependency>) { enum class Scope(val scope: String, val dependencyLambda: (Project) -> List<IClasspathDependency>) {
@ -44,180 +24,11 @@ enum class Scope(val scope: String, val dependencyLambda: (Project) -> List<ICla
companion object { companion object {
fun toScopes(isTest: Boolean) = if (isTest) listOf(Scope.TEST, Scope.COMPILE) else listOf(Scope.COMPILE) fun toScopes(isTest: Boolean) = if (isTest) listOf(Scope.TEST, Scope.COMPILE) else listOf(Scope.COMPILE)
/**
* @return a lambda that extracts the correct dependencies from a project based on the scope
* filters passed (excludes optional dependencies).
*/
fun toDependencyLambda(scopes: Collection<Scope>) : (Project) -> List<IClasspathDependency> {
val result = { project : Project ->
val deps = scopes.fold(arrayListOf<IClasspathDependency>(),
{ list: ArrayList<IClasspathDependency>, scope: Scope ->
list.addAll(scope.dependencyLambda(project).filter { ! it.optional })
list
})
deps
}
return result
}
} }
} }
class DependencyResult(val dependency: IClasspathDependency, val repoUrl: String) class DependencyResult(val dependency: IClasspathDependency, val repoUrl: String)
class AetherResult(val artifact: Artifact, val repository: ArtifactRepository)
class KobaltAether @Inject constructor (val settings: KobaltSettings, val aether: Aether) {
companion object {
fun isRangeVersion(id: String) = id.contains(",")
}
/**
* Create an IClasspathDependency from a Kobalt id.
*/
fun create(id: String, optional: Boolean) = AetherDependency(DefaultArtifact(id), optional)
/**
* @return the latest artifact for the given group and artifactId.
*/
fun latestArtifact(group: String, artifactId: String, extension: String = "jar"): DependencyResult
= aether.latestArtifact(group, artifactId, extension).let {
DependencyResult(AetherDependency(it.artifact), it.repository.toString())
}
fun resolveAll(id: String, artifactScope: Scope? = null, dependencyFilter: DependencyFilter?)
: List<String> {
val results = aether.resolve(DefaultArtifact(id), artifactScope, dependencyFilter)
return results.map { it.artifact.toString() }
}
fun resolve(id: String, artifactScope: Scope? = null, dependencyFilter: DependencyFilter = Filters.COMPILE_FILTER)
: DependencyResult {
kobaltLog(ConsoleRepositoryListener.LOG_LEVEL, "Resolving $id")
val result = resolveToArtifact(id, artifactScope, dependencyFilter)
if (result != null) {
return DependencyResult(AetherDependency(result.artifact), result.repository.toString())
} else {
throw KobaltException("Couldn't resolve $id")
}
}
fun resolveToArtifact(id: String, artifactScope: Scope? = null,
dependencyFilter: DependencyFilter? = null)
: AetherResult? {
kobaltLog(ConsoleRepositoryListener.LOG_LEVEL, "Resolving $id")
val results = aether.resolve(DefaultArtifact(MavenId.toKobaltId(id)), artifactScope, dependencyFilter)
if (results.size > 0) {
return results[0]
} else {
return null
}
}
}
@Singleton
class Aether(localRepo: File, val settings: KobaltSettings, eventBus: EventBus) {
private val system = Booter.newRepositorySystem()
private val session = Booter.newRepositorySystemSession(system, localRepo, settings, eventBus)
private val kobaltRepositories: List<RemoteRepository>
get() = Kobalt.repos.map {
RemoteRepository.Builder(null, "default", it.url)
// .setSnapshotPolicy(RepositoryPolicy(false, null, null))
.build().let { repository ->
val proxyConfigs = settings.proxyConfigs ?: return@map repository
RemoteRepository.Builder(repository).apply {
setProxy(proxyConfigs.getProxy(repository.protocol)?.toAetherProxy())
}.build()
}
}
private fun rangeRequest(a: Artifact): VersionRangeRequest
= VersionRangeRequest(a, kobaltRepositories, "RELEASE")
private fun collectRequest(artifact: Artifact, scope: Scope?): CollectRequest {
with(CollectRequest()) {
root = Dependency(artifact, scope?.scope)
repositories = kobaltRepositories
return this
}
}
fun latestArtifact(group: String, artifactId: String, extension: String = "jar"): AetherResult {
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, null)
if (artifactResult.any()) {
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 request = VersionRangeRequest(artifact, kobaltRepositories, null)
val result = system.resolveVersionRange(session, request)
return result
}
fun resolve(artifact: Artifact, artifactScope: Scope?,
dependencyFilter: DependencyFilter? = null)
: List<AetherResult> {
fun manageException(ex: Exception, artifact: Artifact): List<AetherResult> {
if (artifact.extension == "pom") {
// Only display a warning for .pom files. Not resolving a .jar or other artifact
// is not necessarily an error as long as there is a pom file.
warn("Couldn't resolve $artifact")
}
return emptyList()
}
try {
val result =
if (KobaltAether.isRangeVersion(artifact.version)) {
val request = rangeRequest(artifact)
val v = system.resolveVersionRange(session, request)
if (v.highestVersion != null) {
val highestVersion = v.highestVersion.toString()
val ar = DefaultArtifact(artifact.groupId, artifact.artifactId, artifact.classifier,
artifact.extension, highestVersion)
listOf(AetherResult(ar, request.repositories[0]))
} else {
throw KobaltException("Couldn't resolve range artifact " + artifact)
}
} else {
val dependencyRequest = DependencyRequest(collectRequest(artifact, artifactScope), dependencyFilter)
try {
system.resolveDependencies(session, dependencyRequest).artifactResults.map {
AetherResult(it.artifact, it.repository)
}
} catch(ex: Exception) {
throw KobaltException("Couldn't resolve $artifact", ex)
}
}
return result
} catch(ex: ArtifactNotFoundException) {
return manageException(ex, artifact)
} catch(ex: DependencyResolutionException) {
return manageException(ex, artifact)
}
}
// fun transitiveDependencies(artifact: Artifact) = directDependencies(artifact)
fun directDependencies(artifact: Artifact, artifactScope: Scope? = null): CollectResult?
= system.collectDependencies(session, collectRequest(artifact, artifactScope))
}
class AetherDependency(val artifact: Artifact, override val optional: Boolean = false) class AetherDependency(val artifact: Artifact, override val optional: Boolean = false)
: IClasspathDependency, Comparable<AetherDependency> { : IClasspathDependency, Comparable<AetherDependency> {
val aether: KobaltMavenResolver get() = Kobalt.INJECTOR.getInstance(KobaltMavenResolver::class.java) val aether: KobaltMavenResolver get() = Kobalt.INJECTOR.getInstance(KobaltMavenResolver::class.java)
@ -282,82 +93,3 @@ class AetherDependency(val artifact: Artifact, override val optional: Boolean =
override fun toString() = id override fun toString() = id
} }
//fun f(argv: Array<String>) {
// val collectRequest = CollectRequest().apply {
// root = Dependency(DefaultArtifact("com.squareup.retrofit2:converter-jackson:jar:2.1.0"), JavaScopes.COMPILE)
// repositories = listOf(
//// RemoteRepository.Builder("Maven", "default", "http://repo1.maven.org/maven2/").build()
// RemoteRepository.Builder("JCenter", "default", "https://jcenter.bintray.com").build()
// )
// }
//// val dependencyRequest = DependencyRequest().apply {
//// collectRequest = request
//// filter = object: DependencyFilter {
//// override fun accept(p0: DependencyNode, p1: MutableList<DependencyNode>?): Boolean {
//// if (p0.artifact.artifactId.contains("android")) {
//// println("ANDROID")
//// }
//// return p0.dependency.scope == JavaScopes.COMPILE
//// }
////
//// }
//// }
// val dr2 = DependencyRequest(collectRequest, null).apply {}
//
//
//// val system = ManualRepositorySystemFactory.newRepositorySystem()
//// val session = DefaultRepositorySystemSession()
//// val localRepo = LocalRepository(File("/Users/cedricbeust/t/localAether").absolutePath)
//// session.localRepositoryManager = system.newLocalRepositoryManager(session, localRepo)
//
// val system = Booter.newRepositorySystem()
// val session = Booter.newRepositorySystemSession(system)
//
// val result = system.resolveDependencies(session, dr2).artifactResults
// println("RESULT: " + result)
//
//// KobaltLogger.LOG_LEVEL = 1
//// val id = "org.testng:testng:6.9.11"
//// val aether = KobaltAether(KobaltSettings(KobaltSettingsXml()), Aether(File(homeDir(".aether")),
//// KobaltSettings(KobaltSettingsXml()), EventBus()))
//// val r = aether.resolve(id)
//// val r2 = aether.resolve(id)
//// val d = org.eclipse.aether.artifact.DefaultArtifact("org.testng:testng:6.9")
////
//// println("Artifact: " + d)
//}
//fun f2() {
// val system = Booter.newRepositorySystem()
//
// val session = Booter.newRepositorySystemSession(system)
//
// val artifact = DefaultArtifact("com.squareup.retrofit2:converter-jackson:jar:2.1.0")
//
//// DependencyFilter classpathFlter = DependencyFilterUtils.classpathFilter( JavaScopes.COMPILE );
// val f2 = DependencyFilter { dependencyNode, list ->
// println("ACCEPTING " + dependencyNode)
// true
// }
//
// val collectRequest = CollectRequest()
// collectRequest.root = Dependency(artifact, JavaScopes.COMPILE)
// collectRequest.repositories = listOf(
// RemoteRepository.Builder("Maven", "default", "http://repo1.maven.org/maven2/").build()
// )
//
// val dependencyRequest = DependencyRequest(collectRequest, null)
//
// val artifactResults = system.resolveDependencies(session, dependencyRequest).artifactResults
//
// for (artifactResult in artifactResults) {
// println(artifactResult.artifact.toString() + " resolved to " + artifactResult.artifact.file)
// }
//}
//
//
//fun main(args: Array<String>) {
// f2()
//}

View file

@ -77,7 +77,7 @@ class KobaltMavenResolver @Inject constructor(val settings: KobaltSettings,
directDependencies(id, scope) directDependencies(id, scope)
} }
private fun resolveVersion(artifact: Artifact): VersionRangeResult? { fun resolveVersion(artifact: Artifact): VersionRangeResult? {
val request = VersionRangeRequest(artifact, kobaltRepositories, null) val request = VersionRangeRequest(artifact, kobaltRepositories, null)
val result = system.resolveVersionRange(session, request) val result = system.resolveVersionRange(session, request)
return result return result

View file

@ -4,15 +4,15 @@ import com.beust.kobalt.KobaltException
import com.beust.kobalt.api.Project import com.beust.kobalt.api.Project
import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.maven.DependencyManager
import com.beust.kobalt.maven.MavenId import com.beust.kobalt.maven.MavenId
import com.beust.kobalt.maven.aether.Aether
import com.beust.kobalt.maven.aether.AetherDependency import com.beust.kobalt.maven.aether.AetherDependency
import com.beust.kobalt.maven.aether.KobaltMavenResolver
import javax.inject.Inject import javax.inject.Inject
/** /**
* Find out if any newer versions of the dependencies are available. * Find out if any newer versions of the dependencies are available.
*/ */
class CheckVersions @Inject constructor(val depManager: DependencyManager, class CheckVersions @Inject constructor(val depManager: DependencyManager,
val executors : KobaltExecutors, val aether: Aether) { val executors : KobaltExecutors, val resolver: KobaltMavenResolver) {
fun run(projects: List<Project>) = projects.forEach { run(it) } fun run(projects: List<Project>) = projects.forEach { run(it) }
@ -26,7 +26,7 @@ class CheckVersions @Inject constructor(val depManager: DependencyManager,
try { try {
val latestDep = depManager.create(dep.shortId, false, project.directory) val latestDep = depManager.create(dep.shortId, false, project.directory)
val artifact = (latestDep as AetherDependency).artifact val artifact = (latestDep as AetherDependency).artifact
val versions = aether.resolveVersion(artifact) val versions = resolver.resolveVersion(artifact)
val releases = versions?.versions?.filter { !it.toString().contains("SNAP")} val releases = versions?.versions?.filter { !it.toString().contains("SNAP")}
val highest = if (releases != null && releases.any()) { val highest = if (releases != null && releases.any()) {
releases.last().toString() releases.last().toString()

View file

@ -8,7 +8,6 @@ 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
@ -52,7 +51,6 @@ open class MainModule(val args: Args, val settings: KobaltSettings) : AbstractMo
}) })
EventBus().let { eventBus -> EventBus().let { eventBus ->
bind(EventBus::class.java).toInstance(eventBus) bind(EventBus::class.java).toInstance(eventBus)
bind(Aether::class.java).toInstance(Aether(settings.localCache, settings, eventBus))
} }
bind(PluginInfo::class.java).toProvider(Provider<PluginInfo> { bind(PluginInfo::class.java).toProvider(Provider<PluginInfo> {
PluginInfo.readKobaltPluginXml() PluginInfo.readKobaltPluginXml()