@@ -4,69 +4,69 @@ import com.github.jengelman.gradle.plugins.processes.tasks.Fork
4
4
import org.gradle.api.Plugin
5
5
import org.gradle.api.Project
6
6
import org.gradle.api.logging.Logging
7
+ import org.gradle.api.provider.Property
7
8
import java.util.*
8
9
10
+ @Suppress(" unused" )
9
11
open class OpenApiGradlePlugin : Plugin <Project > {
10
- private val LOGGER =
11
- Logging .getLogger(OpenApiGradlePlugin ::class .java)
12
+ private val logger = Logging .getLogger(OpenApiGradlePlugin ::class .java)
12
13
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 )
17
18
18
- project.extensions.create(EXTENSION_NAME , OpenApiExtension ::class .java, project)
19
+ project.extensions.create(EXTENSION_NAME , OpenApiExtension ::class .java, project)
19
20
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 )
23
24
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
+ }
27
28
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)
31
32
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
+ }
34
39
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
+ }
51
46
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
+ }
56
53
57
- val stopForkedSpringBoot = project.tasks.register(FINALIZER_TASK_NAME ) {
58
- it.dependsOn(forkedSpringBoot)
59
- it.doLast {
60
- forkedSpringBoot.get().processHandle.abort();
61
- }
62
- }
54
+ }
63
55
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