From 5e1f0bc5774e5cd0cf8edccb363a365752cc385e Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Thu, 27 May 2021 23:04:13 -0700 Subject: [PATCH] Add a resource directory to the main source set instead of adding resources using processResources This allows for IDEs to recognize the generated resources. This also fixes an issue where sometimes running `clean build` would cause 'java.io.IOException: Unable to delete directory', although this fix may also be due to the new approach no longer creating a temporary directory. --- .../minecrell/pluginyml/GeneratePluginDescription.kt | 11 +++++------ .../kotlin/net/minecrell/pluginyml/PlatformPlugin.kt | 12 ++++++++---- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/net/minecrell/pluginyml/GeneratePluginDescription.kt b/src/main/kotlin/net/minecrell/pluginyml/GeneratePluginDescription.kt index 8cf9cd9..456b759 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/GeneratePluginDescription.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/GeneratePluginDescription.kt @@ -35,14 +35,13 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator import com.fasterxml.jackson.module.kotlin.registerKotlinModule import org.gradle.api.DefaultTask import org.gradle.api.NamedDomainObjectCollection +import org.gradle.api.file.DirectoryProperty import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider import org.gradle.api.tasks.Input import org.gradle.api.tasks.Nested -import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property -import java.io.File open class GeneratePluginDescription : DefaultTask() { @@ -52,8 +51,8 @@ open class GeneratePluginDescription : DefaultTask() { @Nested val pluginDescription: Property = project.objects.property() - val outputFile: Provider - @OutputFile get() = fileName.map { File(temporaryDir, it) } + @OutputDirectory + val outputDirectory: DirectoryProperty = project.objects.directoryProperty() @TaskAction fun generate() { @@ -72,7 +71,7 @@ open class GeneratePluginDescription : DefaultTask() { .registerModule(module) .setSerializationInclusion(JsonInclude.Include.NON_EMPTY) - mapper.writeValue(outputFile.get(), pluginDescription.get()) + mapper.writeValue(outputDirectory.file(fileName).get().asFile, pluginDescription.get()) } object NamedDomainObjectCollectionConverter : StdConverter, Map>() { diff --git a/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt b/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt index f5913c3..4ce53a1 100644 --- a/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt +++ b/src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt @@ -27,9 +27,10 @@ package net.minecrell.pluginyml import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin -import org.gradle.api.tasks.AbstractCopyTask -import org.gradle.kotlin.dsl.named import org.gradle.kotlin.dsl.register +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType abstract class PlatformPlugin(private val platformName: String, private val fileName: String) : Plugin { @@ -43,9 +44,12 @@ abstract class PlatformPlugin(private val platformName: S // Add extension extensions.add(platformName.decapitalize(), description) + val generatedResourcesDirectory = layout.buildDirectory.dir("generated/plugin-yml/$platformName") + // Create task val generateTask = tasks.register("generate${platformName}PluginDescription") { fileName.set(this@PlatformPlugin.fileName) + outputDirectory.set(generatedResourcesDirectory) pluginDescription.set(provider { setDefaults(project, description) description @@ -57,8 +61,8 @@ abstract class PlatformPlugin(private val platformName: S } plugins.withType { - tasks.named("processResources") { - from(generateTask) + extensions.getByType().named(SourceSet.MAIN_SOURCE_SET_NAME) { + resources.srcDir(generateTask) } } }