Hi all,
I have generated this custom task within my build.gradle.kts,
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
import org.gradle.process.ExecOperations
import org.gradle.api.Action
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import javax.inject.Inject
plugins {
java
checkstyle
jacoco
id("com.github.spotbugs")
id("copy-configuration")
}
configurations {
create("openapi")
}
dependencies {
gradle.tool("MyBuildTool").forEach { dep ->
add("openapi", dep)
}
}
abstract class OpenApiGenerateModel : DefaultTask() {
@get:Inject
abstract val execOperations: ExecOperations
private val classPath: FileCollection by lazy {
project.configurations.getByName("openapi")
}
@get:InputFile
abstract val inputSpecFile: RegularFileProperty
@get:OutputDirectory
abstract val outputDir: DirectoryProperty
@get:Input
abstract val modelPackageName: Property<String>
@get:InputFile
abstract val modelsFile: RegularFileProperty
@get:Input
abstract val generatePrivateFields: Property<Boolean>
@get:Input
abstract val generateResourcePrivateFields: Property<Boolean>
@TaskAction
fun generate() {
project.tasks.register<JavaExec>("generateOpenApiModel") {
classpath = classPath
mainClass.set("org.openapitools.codegen.OpenAPIGenerator")
systemProperty("modelDocs", "true")
systemProperty("generatePrivateFields", generatePrivateFields.get())
systemProperty("generateResourcePrivateFields", generateResourcePrivateFields.get())
args(
"generate",
"--generator-name=customName",
"--input-spec=${inputSpecFile.get().asFile}",
"--output=${outputDir.get().asFile}",
"--model-package=${modelPackageName.get()}",
"--config=${project.path}",
"--template-dir=${project.path}"
)
}.get().exec()
}
}
tasks.register<OpenApiGenerateModel>("openapi-generate-model") {
inputSpecFile.set(file("${buildDir}/private/openapi/customModel.yaml"))
outputDir.set(File(brazilGradle.buildDir, "${buildDir}/models/customDir"))
modelPackageName.set("model.package.name")
generatePrivateFields.set(true)
generateResourcePrivateFields.set(false)
}
During the build, I receive the following error:
Could not determine the dependencies of task ':compileJava'.
> Could not create task ':openapi-generate-model'.
> Could not create task of type 'OpenApiGenerateModel'.
> Class Build_gradle.OpenApiGenerateModel is a non-static inner class.
I have written this same script in groovy with no issue, however in kotlin, i always seem to get this error. I have read on stack overflow here that this issue may arise when the task uses a variable or state from outside the class definition. I am not really sure where to go from here, any pointers in the right direction would be very helpful.