mirror of
https://github.com/plexusorg/plugin-yml.git
synced 2024-12-22 16:25:06 +00:00
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.
This commit is contained in:
parent
e44b877174
commit
5e1f0bc577
2 changed files with 13 additions and 10 deletions
|
@ -35,14 +35,13 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator
|
||||||
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
|
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.NamedDomainObjectCollection
|
import org.gradle.api.NamedDomainObjectCollection
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.gradle.api.tasks.Input
|
import org.gradle.api.tasks.Input
|
||||||
import org.gradle.api.tasks.Nested
|
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.api.tasks.TaskAction
|
||||||
import org.gradle.kotlin.dsl.property
|
import org.gradle.kotlin.dsl.property
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
open class GeneratePluginDescription : DefaultTask() {
|
open class GeneratePluginDescription : DefaultTask() {
|
||||||
|
|
||||||
|
@ -52,8 +51,8 @@ open class GeneratePluginDescription : DefaultTask() {
|
||||||
@Nested
|
@Nested
|
||||||
val pluginDescription: Property<PluginDescription> = project.objects.property()
|
val pluginDescription: Property<PluginDescription> = project.objects.property()
|
||||||
|
|
||||||
val outputFile: Provider<File>
|
@OutputDirectory
|
||||||
@OutputFile get() = fileName.map { File(temporaryDir, it) }
|
val outputDirectory: DirectoryProperty = project.objects.directoryProperty()
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
fun generate() {
|
fun generate() {
|
||||||
|
@ -72,7 +71,7 @@ open class GeneratePluginDescription : DefaultTask() {
|
||||||
.registerModule(module)
|
.registerModule(module)
|
||||||
.setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
|
.setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
|
||||||
|
|
||||||
mapper.writeValue(outputFile.get(), pluginDescription.get())
|
mapper.writeValue(outputDirectory.file(fileName).get().asFile, pluginDescription.get())
|
||||||
}
|
}
|
||||||
|
|
||||||
object NamedDomainObjectCollectionConverter : StdConverter<NamedDomainObjectCollection<Any>, Map<String, Any>>() {
|
object NamedDomainObjectCollectionConverter : StdConverter<NamedDomainObjectCollection<Any>, Map<String, Any>>() {
|
||||||
|
|
|
@ -27,9 +27,10 @@ package net.minecrell.pluginyml
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.plugins.JavaPlugin
|
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.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
|
import org.gradle.kotlin.dsl.withType
|
||||||
|
|
||||||
abstract class PlatformPlugin<T : PluginDescription>(private val platformName: String, private val fileName: String) : Plugin<Project> {
|
abstract class PlatformPlugin<T : PluginDescription>(private val platformName: String, private val fileName: String) : Plugin<Project> {
|
||||||
|
@ -43,9 +44,12 @@ abstract class PlatformPlugin<T : PluginDescription>(private val platformName: S
|
||||||
// Add extension
|
// Add extension
|
||||||
extensions.add(platformName.decapitalize(), description)
|
extensions.add(platformName.decapitalize(), description)
|
||||||
|
|
||||||
|
val generatedResourcesDirectory = layout.buildDirectory.dir("generated/plugin-yml/$platformName")
|
||||||
|
|
||||||
// Create task
|
// Create task
|
||||||
val generateTask = tasks.register<GeneratePluginDescription>("generate${platformName}PluginDescription") {
|
val generateTask = tasks.register<GeneratePluginDescription>("generate${platformName}PluginDescription") {
|
||||||
fileName.set(this@PlatformPlugin.fileName)
|
fileName.set(this@PlatformPlugin.fileName)
|
||||||
|
outputDirectory.set(generatedResourcesDirectory)
|
||||||
pluginDescription.set(provider {
|
pluginDescription.set(provider {
|
||||||
setDefaults(project, description)
|
setDefaults(project, description)
|
||||||
description
|
description
|
||||||
|
@ -57,8 +61,8 @@ abstract class PlatformPlugin<T : PluginDescription>(private val platformName: S
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins.withType<JavaPlugin> {
|
plugins.withType<JavaPlugin> {
|
||||||
tasks.named<AbstractCopyTask>("processResources") {
|
extensions.getByType<SourceSetContainer>().named(SourceSet.MAIN_SOURCE_SET_NAME) {
|
||||||
from(generateTask)
|
resources.srcDir(generateTask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue