mirror of
https://github.com/tadfisher/gradle2nix.git
synced 2026-01-11 15:30:38 -05:00
plugin: Support repositories in dependencyResolutionManagement block
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
plugins {
|
||||||
|
java
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("org.apache:test:1.0.0")
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
dependencyResolutionManagement {
|
||||||
|
repositories {
|
||||||
|
maven { url = uri("http://localhost:9999") }
|
||||||
|
}
|
||||||
|
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
|
||||||
|
}
|
||||||
7617
gradle-env.json
7617
gradle-env.json
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,7 @@
|
|||||||
package org.nixos.gradle2nix
|
package org.nixos.gradle2nix
|
||||||
|
|
||||||
import dev.minutest.Tests
|
import dev.minutest.Tests
|
||||||
|
import dev.minutest.experimental.minus
|
||||||
import dev.minutest.junit.JUnit5Minutests
|
import dev.minutest.junit.JUnit5Minutests
|
||||||
import dev.minutest.rootContext
|
import dev.minutest.rootContext
|
||||||
import dev.minutest.test
|
import dev.minutest.test
|
||||||
@@ -11,14 +12,25 @@ class SettingsTest : JUnit5Minutests {
|
|||||||
@Tests
|
@Tests
|
||||||
fun tests() = rootContext("settings tests") {
|
fun tests() = rootContext("settings tests") {
|
||||||
withRepository("m2") {
|
withRepository("m2") {
|
||||||
|
|
||||||
withFixture("settings/buildscript") {
|
withFixture("settings/buildscript") {
|
||||||
test("resolves settings plugin in buildscript classpath") {
|
test("resolves settings plugin in buildscript classpath") {
|
||||||
expectThat(build()) {
|
expectThat(build()) {
|
||||||
get("settings dependencies") { settingsDependencies }.ids
|
get("settings dependencies") { settingsDependencies }.ids.containsExactly(
|
||||||
.containsExactly(
|
"org.apache:test:1.0.0@jar",
|
||||||
"org.apache:test:1.0.0@jar",
|
"org.apache:test:1.0.0@pom"
|
||||||
"org.apache:test:1.0.0@pom"
|
)
|
||||||
)
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
withFixture("settings/dependency-resolution-management") {
|
||||||
|
GRADLE_MIN("6.8") - test("uses repositories from settings script") {
|
||||||
|
expectThat(build()) {
|
||||||
|
get("root project dependencies") { rootProject.projectDependencies }.ids.containsExactly(
|
||||||
|
"org.apache:test:1.0.0@jar",
|
||||||
|
"org.apache:test:1.0.0@pom"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ enum class ConfigurationScope {
|
|||||||
internal class ConfigurationResolverFactory(
|
internal class ConfigurationResolverFactory(
|
||||||
project: Project,
|
project: Project,
|
||||||
scope: ConfigurationScope,
|
scope: ConfigurationScope,
|
||||||
repositories: RepositoryHandler
|
repositories: List<ResolutionAwareRepository>
|
||||||
) {
|
) {
|
||||||
private val ivySettings = IvySettings().apply {
|
private val ivySettings = IvySettings().apply {
|
||||||
defaultInit()
|
defaultInit()
|
||||||
@@ -49,7 +49,6 @@ internal class ConfigurationResolverFactory(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val resolvers = repositories
|
private val resolvers = repositories
|
||||||
.filterIsInstance<ResolutionAwareRepository>()
|
|
||||||
.filterNot { it.createResolver().isLocal }
|
.filterNot { it.createResolver().isLocal }
|
||||||
.mapNotNull { it.repositoryResolver(project, scope, ivySettings) }
|
.mapNotNull { it.repositoryResolver(project, scope, ivySettings) }
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.gradle.api.Task
|
|||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.artifacts.ProjectDependency
|
import org.gradle.api.artifacts.ProjectDependency
|
||||||
import org.gradle.api.internal.GradleInternal
|
import org.gradle.api.internal.GradleInternal
|
||||||
|
import org.gradle.api.internal.artifacts.repositories.ResolutionAwareRepository
|
||||||
import org.gradle.api.invocation.Gradle
|
import org.gradle.api.invocation.Gradle
|
||||||
import org.gradle.api.tasks.TaskContainer
|
import org.gradle.api.tasks.TaskContainer
|
||||||
import org.gradle.api.tasks.wrapper.Wrapper
|
import org.gradle.api.tasks.wrapper.Wrapper
|
||||||
@@ -132,7 +133,11 @@ private fun Project.buildGradle(): DefaultGradle =
|
|||||||
private fun Project.settingsDependencies(): List<DefaultArtifact> {
|
private fun Project.settingsDependencies(): List<DefaultArtifact> {
|
||||||
val buildscript = (gradle as GradleInternal).settings.buildscript
|
val buildscript = (gradle as GradleInternal).settings.buildscript
|
||||||
|
|
||||||
val resolverFactory = ConfigurationResolverFactory(this, ConfigurationScope.SETTINGS, buildscript.repositories)
|
val resolverFactory = ConfigurationResolverFactory(
|
||||||
|
this,
|
||||||
|
ConfigurationScope.SETTINGS,
|
||||||
|
buildscript.repositories.filterIsInstance<ResolutionAwareRepository>()
|
||||||
|
)
|
||||||
val resolver = resolverFactory.create(buildscript.dependencies)
|
val resolver = resolverFactory.create(buildscript.dependencies)
|
||||||
|
|
||||||
logger.lifecycle(" Settings script")
|
logger.lifecycle(" Settings script")
|
||||||
@@ -208,7 +213,11 @@ private fun Project.buildProject(
|
|||||||
private fun Project.buildscriptDependencies(
|
private fun Project.buildscriptDependencies(
|
||||||
pluginArtifacts: List<DefaultArtifact>
|
pluginArtifacts: List<DefaultArtifact>
|
||||||
): Pair<List<DefaultArtifact>, List<ArtifactIdentifier>> {
|
): Pair<List<DefaultArtifact>, List<ArtifactIdentifier>> {
|
||||||
val resolverFactory = ConfigurationResolverFactory(this, ConfigurationScope.BUILDSCRIPT, buildscript.repositories)
|
val resolverFactory = ConfigurationResolverFactory(
|
||||||
|
this,
|
||||||
|
ConfigurationScope.BUILDSCRIPT,
|
||||||
|
buildscript.repositories.filterIsInstance<ResolutionAwareRepository>()
|
||||||
|
)
|
||||||
val resolver = resolverFactory.create(buildscript.dependencies)
|
val resolver = resolverFactory.create(buildscript.dependencies)
|
||||||
val pluginIds = pluginArtifacts.map(DefaultArtifact::id)
|
val pluginIds = pluginArtifacts.map(DefaultArtifact::id)
|
||||||
return buildscript.configurations
|
return buildscript.configurations
|
||||||
@@ -221,8 +230,11 @@ private fun Project.buildscriptDependencies(
|
|||||||
private fun Project.projectDependencies(
|
private fun Project.projectDependencies(
|
||||||
explicitConfigurations: List<String>
|
explicitConfigurations: List<String>
|
||||||
): Pair<List<DefaultArtifact>, List<ArtifactIdentifier>> {
|
): Pair<List<DefaultArtifact>, List<ArtifactIdentifier>> {
|
||||||
val resolverFactory = ConfigurationResolverFactory(this, ConfigurationScope.PROJECT, repositories)
|
val resolver = ConfigurationResolverFactory(
|
||||||
val resolver = resolverFactory.create(dependencies)
|
this,
|
||||||
|
ConfigurationScope.PROJECT,
|
||||||
|
RepositoriesCollector.create(project).collectRepositories()
|
||||||
|
).create(dependencies)
|
||||||
return collectConfigurations(explicitConfigurations)
|
return collectConfigurations(explicitConfigurations)
|
||||||
.flatMap(resolver::resolve)
|
.flatMap(resolver::resolve)
|
||||||
.distinct()
|
.distinct()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.nixos.gradle2nix
|
package org.nixos.gradle2nix
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.internal.artifacts.repositories.ResolutionAwareRepository
|
||||||
import org.gradle.plugin.management.PluginRequest
|
import org.gradle.plugin.management.PluginRequest
|
||||||
import org.gradle.plugin.use.internal.PluginDependencyResolutionServices
|
import org.gradle.plugin.use.internal.PluginDependencyResolutionServices
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -14,7 +15,7 @@ internal open class PluginResolver @Inject constructor(
|
|||||||
private val resolver = ConfigurationResolverFactory(
|
private val resolver = ConfigurationResolverFactory(
|
||||||
project,
|
project,
|
||||||
ConfigurationScope.PLUGIN,
|
ConfigurationScope.PLUGIN,
|
||||||
pluginDependencyResolutionServices.resolveRepositoryHandler
|
pluginDependencyResolutionServices.resolveRepositoryHandler.filterIsInstance<ResolutionAwareRepository>()
|
||||||
).create(pluginDependencyResolutionServices.dependencyHandler)
|
).create(pluginDependencyResolutionServices.dependencyHandler)
|
||||||
|
|
||||||
fun resolve(pluginRequests: List<PluginRequest>): List<DefaultArtifact> {
|
fun resolve(pluginRequests: List<PluginRequest>): List<DefaultArtifact> {
|
||||||
@@ -28,4 +29,3 @@ internal open class PluginResolver @Inject constructor(
|
|||||||
return resolver.resolve(configurations.detachedConfiguration(*markerDependencies.toTypedArray()))
|
return resolver.resolve(configurations.detachedConfiguration(*markerDependencies.toTypedArray()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package org.nixos.gradle2nix
|
||||||
|
|
||||||
|
import org.gradle.api.internal.artifacts.repositories.ResolutionAwareRepository
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
||||||
|
import org.gradle.api.initialization.dsl.ScriptHandler
|
||||||
|
import org.gradle.api.internal.artifacts.RepositoriesSupplier
|
||||||
|
import org.gradle.kotlin.dsl.newInstance
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
interface RepositoriesCollector {
|
||||||
|
fun collectRepositories(): List<ResolutionAwareRepository>
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun create(project: Project): RepositoriesCollector =
|
||||||
|
if (GradleVersion.current() >= GradleVersion.version("6.8")) {
|
||||||
|
project.objects.newInstance<RepositoriesCollector68>()
|
||||||
|
} else {
|
||||||
|
project.objects.newInstance<RepositoriesCollectorBase>()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open class RepositoriesCollectorBase @Inject constructor(
|
||||||
|
private val repositories: RepositoryHandler
|
||||||
|
): RepositoriesCollector {
|
||||||
|
override fun collectRepositories(): List<ResolutionAwareRepository> =
|
||||||
|
repositories.filterIsInstance<ResolutionAwareRepository>()
|
||||||
|
}
|
||||||
|
|
||||||
|
open class RepositoriesCollector68 @Inject constructor(
|
||||||
|
private val repositoriesSupplier: RepositoriesSupplier
|
||||||
|
): RepositoriesCollector {
|
||||||
|
override fun collectRepositories(): List<ResolutionAwareRepository> =
|
||||||
|
repositoriesSupplier.get()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user