Add dependency scopes option for scripting resolvers

This commit is contained in:
Ilya Muradyan
2020-07-12 04:27:28 +03:00
parent 742b98bed6
commit 1ac9b4c38f
8 changed files with 108 additions and 9 deletions
@@ -21,6 +21,7 @@ import kotlin.script.experimental.dependencies.impl.makeResolveFailureResult
import kotlin.script.experimental.dependencies.impl.toRepositoryUrlOrNull
import kotlin.script.experimental.dependencies.maven.impl.AetherResolveSession
import kotlin.script.experimental.dependencies.maven.impl.mavenCentral
import kotlin.script.experimental.dependencies.impl.dependencyScopes
class MavenRepositoryCoordinates(
@@ -62,7 +63,12 @@ class MavenDependenciesResolver : ExternalDependenciesResolver {
val artifactId = artifactCoordinates.toMavenArtifact()!!
try {
val deps = AetherResolveSession(localRepo, remoteRepositories()).resolve(artifactId, JavaScopes.RUNTIME)
val dependencyScopes = options.dependencyScopes ?: listOf(JavaScopes.COMPILE, JavaScopes.RUNTIME)
val deps = AetherResolveSession(
localRepo, remoteRepositories()
).resolve(
artifactId, dependencyScopes.joinToString(",")
)
if (deps != null)
return ResultWithDiagnostics.Success(deps.map { it.file })
} catch (e: DependencyResolutionException) {
@@ -14,16 +14,21 @@ import kotlin.reflect.full.primaryConstructor
import kotlin.script.experimental.dependencies.maven.MavenDependenciesResolver
import kotlin.script.experimental.api.ResultWithDiagnostics
import kotlin.script.experimental.api.valueOrThrow
import kotlin.script.experimental.dependencies.DependsOn
import kotlin.script.experimental.dependencies.Repository
import kotlin.script.experimental.dependencies.resolveFromAnnotations
import kotlin.script.experimental.dependencies.*
import kotlin.script.experimental.dependencies.impl.DependenciesResolverOptionsName
import kotlin.script.experimental.dependencies.impl.makeExternalDependenciesResolverOptions
import kotlin.script.experimental.dependencies.impl.set
@ExperimentalContracts
class MavenResolverTest : ResolversTestBase() {
fun resolveAndCheck(coordinates: String, checkBody: (Iterable<File>) -> Boolean = { true }) {
fun resolveAndCheck(
coordinates: String,
options: ExternalDependenciesResolver.Options = ExternalDependenciesResolver.Options.Empty,
checkBody: (Iterable<File>) -> Boolean = { true }
) {
val resolver = MavenDependenciesResolver()
val result = runBlocking { resolver.resolve(coordinates) }
val result = runBlocking { resolver.resolve(coordinates, options) }
if (result is ResultWithDiagnostics.Failure) {
Assert.fail(result.reports.joinToString("\n") { it.exception?.toString() ?: it.message })
}
@@ -40,6 +45,32 @@ class MavenResolverTest : ResolversTestBase() {
}
}
@ExperimentalStdlibApi
fun testResolveWithRuntime() {
val compileOnly = "compile"
val compileRuntime = "compile,runtime"
val resolvedFilesCount = mutableMapOf<String, Int>()
listOf(compileOnly, compileRuntime).forEach { scopes ->
resolveAndCheck(
"org.uberfire:uberfire-io:7.39.0.Final",
makeExternalDependenciesResolverOptions(buildMap {
this[DependenciesResolverOptionsName.SCOPE] = scopes
})
) { files ->
resolvedFilesCount[scopes] = files.count()
files.any { it.name.startsWith("uberfire-commons") }
}
}
val compileOnlyCount = resolvedFilesCount[compileOnly]!!
val compileRuntimeCount = resolvedFilesCount[compileRuntime]!!
assertTrue(
"Compile only ($compileOnlyCount) dependencies count should be less than compile/runtime ($compileRuntimeCount) one",
compileOnlyCount < compileRuntimeCount
)
}
fun testResolveVersionsRange() {
resolveAndCheck("org.jetbrains.kotlin:kotlin-annotations-jvm:(1.3.40,1.3.60)")
}