Improve registering resources tasks in compilations: support laziness

This commit is contained in:
Sergey Igushkin
2021-11-15 22:07:14 +04:00
committed by Space
parent 876ab4ae52
commit 2c6c2c3929
3 changed files with 12 additions and 11 deletions
@@ -17,6 +17,7 @@ import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.internal.artifacts.ArtifactAttributes
import org.gradle.api.plugins.BasePlugin
@@ -135,26 +136,26 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
) {
val project = compilation.target.project
project.locateOrRegisterTask<ProcessResources>(compilation.processResourcesTaskName) { resourcesTask ->
val resourcesDestinationDir = project.file(compilation.output.resourcesDir)
val resourcesTask = project.locateOrRegisterTask<ProcessResources>(compilation.processResourcesTaskName) { resourcesTask ->
resourcesTask.description = "Processes $resourceSet."
resourcesTask.from(resourceSet)
resourcesTask.into(project.file(compilation.output.resourcesDir))
resourcesTask.into(resourcesDestinationDir)
}
compilation.output.resourcesDirProvider = resourcesTask.map { resourcesDestinationDir }
}
protected fun createLifecycleTask(compilation: KotlinCompilation<*>) {
val project = compilation.target.project
compilation.output.classesDirs.from(project.files().builtBy(compilation.compileAllTaskName))
project.registerTask<DefaultTask>(compilation.compileAllTaskName) {
it.group = LifecycleBasePlugin.BUILD_GROUP
it.description = "Assembles outputs for compilation '${compilation.name}' of target '${compilation.target.name}'"
it.dependsOn(compilation.compileKotlinTaskName)
if (compilation is KotlinCompilationWithResources) {
it.dependsOn(compilation.processResourcesTaskName)
}
it.inputs.files(compilation.output.classesDirs)
it.inputs.files(compilation.output.resourcesDirProvider)
}
(compilation.output.allOutputs as? ConfigurableFileCollection)?.from(project.files().builtBy(compilation.compileAllTaskName))
}
override fun defineConfigurationsForTarget(target: KotlinTargetType) {
@@ -19,9 +19,9 @@ class DefaultKotlinCompilationOutput(
override val classesDirs: ConfigurableFileCollection = project.files()
override val allOutputs = project.files().apply {
override val allOutputs: ConfigurableFileCollection = project.files().apply {
from(classesDirs)
from(Callable { resourcesDir })
from(Callable { resourcesDirProvider })
}
override val resourcesDir: File
@@ -55,7 +55,7 @@ open class LifecycleTasksManager(private val project: Project) {
open fun registerClassesTask(compilationData: KotlinCompilationData<*>) = with(project) {
val classesTaskName = compilationData.compileAllTaskName
val classesTask = project.tasks.register(classesTaskName) { classesTask ->
classesTask.dependsOn(compilationData.output.allOutputs)
classesTask.inputs.files(compilationData.output.allOutputs)
}
project.tasks.named(LifecycleBasePlugin.BUILD_TASK_NAME).configure { it.dependsOn(classesTask) }
}