Resolve and apply settings buildscript dependencies

This commit is contained in:
Tad Fisher
2020-11-24 16:35:48 -08:00
parent a99b5f40e3
commit fd6a6f4693
20 changed files with 951 additions and 41 deletions

View File

@@ -28,7 +28,8 @@ import org.gradle.util.GradleVersion
enum class ConfigurationScope {
BUILDSCRIPT,
PLUGIN,
PROJECT
PROJECT,
SETTINGS
}
internal class ConfigurationResolverFactory(

View File

@@ -6,6 +6,7 @@ import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.internal.GradleInternal
import org.gradle.api.invocation.Gradle
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.wrapper.Wrapper
@@ -85,6 +86,7 @@ private fun Project.buildModel(
modelProperties: ModelProperties,
pluginRequests: List<PluginRequest>
): DefaultBuild {
val settingsDependencies = settingsDependencies()
val plugins = buildPlugins(pluginRequests)
val subprojects = if (modelProperties.subprojects.isEmpty()) {
@@ -99,6 +101,7 @@ private fun Project.buildModel(
return DefaultBuild(
gradle = buildGradle(),
settingsDependencies = settingsDependencies,
pluginDependencies = plugins,
rootProject = buildProject(modelProperties.configurations, subprojects, plugins),
includedBuilds = includedBuilds()
@@ -126,6 +129,31 @@ private fun Project.buildGradle(): DefaultGradle =
)
}
private fun Project.settingsDependencies(): List<DefaultArtifact> {
val buildscript = (gradle as GradleInternal).settings.buildscript
val resolverFactory = ConfigurationResolverFactory(this, ConfigurationScope.SETTINGS, buildscript.repositories)
val resolver = resolverFactory.create(buildscript.dependencies)
logger.lifecycle(" Settings script")
val dependencies = buildscript.configurations
.flatMap(resolver::resolve)
.distinct()
.sorted()
if (resolver.unresolved.isNotEmpty()) {
logger.warn(buildString {
append(" Failed to resolve settings script dependencies:\n")
for (id in resolver.unresolved) {
append(" - $id\n")
}
})
}
return dependencies
}
private fun Project.buildPlugins(pluginRequests: List<PluginRequest>): List<DefaultArtifact> {
return objects.newInstance<PluginResolver>(this).resolve(pluginRequests).distinct().sorted()
}