@@ -4,69 +4,69 @@ import com.github.jengelman.gradle.plugins.processes.tasks.Fork
44import org.gradle.api.Plugin
55import org.gradle.api.Project
66import org.gradle.api.logging.Logging
7+ import org.gradle.api.provider.Property
78import java.util.*
89
10+ @Suppress(" unused" )
911open class OpenApiGradlePlugin : Plugin <Project > {
10- private val LOGGER =
11- Logging .getLogger(OpenApiGradlePlugin ::class .java)
12+ private val logger = Logging .getLogger(OpenApiGradlePlugin ::class .java)
1213
13- override fun apply (project : Project ) {
14- // Run time dependency on the following plugins
15- project.plugins.apply (SPRING_BOOT_PLUGIN )
16- project.plugins.apply (PROCESS_PLUGIN )
14+ override fun apply (project : Project ) {
15+ // Run time dependency on the following plugins
16+ project.plugins.apply (SPRING_BOOT_PLUGIN )
17+ project.plugins.apply (PROCESS_PLUGIN )
1718
18- project.extensions.create(EXTENSION_NAME , OpenApiExtension ::class .java, project)
19+ project.extensions.create(EXTENSION_NAME , OpenApiExtension ::class .java, project)
1920
20- project.afterEvaluate {
21- // Spring boot jar task
22- val bootJarTask = project.tasks.named(SPRING_BOOT_JAR_TASK_NAME )
21+ project.afterEvaluate {
22+ // Spring boot jar task
23+ val bootJarTask = project.tasks.named(SPRING_BOOT_JAR_TASK_NAME )
2324
24- val extension: OpenApiExtension = project.extensions.run {
25- getByName(EXTENSION_NAME ) as OpenApiExtension
26- }
25+ val extension: OpenApiExtension = project.extensions.run {
26+ getByName(EXTENSION_NAME ) as OpenApiExtension
27+ }
2728
28- // Create a forked version spring boot run task
29- val forkedSpringBoot = project.tasks.register(FORKED_SPRING_BOOT_RUN_TASK_NAME , Fork ::class .java) { fork ->
30- fork.dependsOn(bootJarTask)
29+ // Create a forked version spring boot run task
30+ val forkedSpringBoot = project.tasks.register(FORKED_SPRING_BOOT_RUN_TASK_NAME , Fork ::class .java) { fork ->
31+ fork.dependsOn(bootJarTask)
3132
32- fork.onlyIf {
33- val bootJar = bootJarTask.get().outputs.files.first()
33+ fork.onlyIf {
34+ val bootJar = bootJarTask.get().outputs.files.first()
35+ fork.commandLine = listOf (" java" , " -jar" ) + extractProperties(extension.forkProperties) + listOf (" $bootJar " )
36+ true
37+ }
38+ }
3439
35- val command = mutableListOf (" java" , " -jar" )
36- if (extension.forkProperties.isPresent) {
37- val element = extension.forkProperties.get()
38- if (element is String ) {
39- val elements = element
40- .split(" -D" )
41- .filter { s -> s.isNotEmpty() }
42- .map { " -D${it.trim()} " }
43- command.addAll(elements)
44- } else if (element is Properties ) {
45- element.toMap().map { r -> " -D${r.key} =${r.value} " }.forEach { p -> command.add(p) }
46- } else {
47- LOGGER .warn(" Failed to use the value set for 'forkProprerties'. Only String and Properties objects are supported." )
48- }
49- }
50- command.add(" $bootJar " )
40+ val stopForkedSpringBoot = project.tasks.register(FINALIZER_TASK_NAME ) {
41+ it.dependsOn(forkedSpringBoot)
42+ it.doLast {
43+ forkedSpringBoot.get().processHandle.abort()
44+ }
45+ }
5146
52- fork.commandLine = command
53- true
54- }
55- }
47+ // This is my task. Before I can run it I have to run the dependent tasks
48+ project.tasks.register(OPEN__API_TASK_NAME , OpenApiGeneratorTask ::class .java) { openApiGenTask ->
49+ openApiGenTask.dependsOn(forkedSpringBoot)
50+ openApiGenTask.finalizedBy(stopForkedSpringBoot)
51+ }
52+ }
5653
57- val stopForkedSpringBoot = project.tasks.register(FINALIZER_TASK_NAME ) {
58- it.dependsOn(forkedSpringBoot)
59- it.doLast {
60- forkedSpringBoot.get().processHandle.abort();
61- }
62- }
54+ }
6355
64- // This is my task. Before I can run it I have to run the dependent tasks
65- project.tasks.register(OPEN__API_TASK_NAME , OpenApiGeneratorTask ::class .java) { openApiGenTask ->
66- openApiGenTask.dependsOn(forkedSpringBoot)
67- openApiGenTask.finalizedBy(stopForkedSpringBoot)
68- }
69- }
70-
71- }
72- }
56+ private fun extractProperties (forkProperties : Property <Any >) =
57+ if (forkProperties.isPresent) {
58+ when (val element = forkProperties.get()) {
59+ is String ->
60+ element.split(" -D" )
61+ .filter { it.isNotEmpty() }
62+ .map { " -D${it.trim()} " }
63+ is Properties ->
64+ element
65+ .map { " -D${it.key} =${it.value} " }
66+ else -> {
67+ logger.warn(" Failed to use the value set for 'forkProperties'. Only String and Properties objects are supported." )
68+ emptyList()
69+ }
70+ }
71+ } else emptyList()
72+ }
0 commit comments