Skip to content

Commit cd8bfd5

Browse files
author
Ramesh KP
committed
Fix: Spring boot application not terminating properly
#11
1 parent 61f35d8 commit cd8bfd5

File tree

4 files changed

+14
-18
lines changed

4 files changed

+14
-18
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ plugins {
22
`java-gradle-plugin`
33
id("com.gradle.plugin-publish") version "0.10.1"
44
id("org.sonarqube") version "2.8"
5-
kotlin("jvm") version "1.3.61"
5+
kotlin("jvm") version "1.3.70"
66
`maven-publish`
77
}
88

99
group = "org.springdoc"
10-
version = "1.0.0"
10+
version = "1.0.1-SNAPSHOT"
1111

1212
sonarqube {
1313
properties {

src/main/kotlin/org/springdoc/openapi/gradle/plugin/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const val OPEN__API_TASK_NAME = "generateOpenApiDocs"
66
const val OPEN_API_TASK_DESCRIPTION = "Generates the spring doc openapi file"
77
const val SPRING_BOOT_JAR_TASK_NAME = "bootJar"
88
const val FORKED_SPRING_BOOT_RUN_TASK_NAME = "forkedSpringBootRun"
9+
const val FINALIZER_TASK_NAME = "stopForkedSpringBoot"
910

1011
const val DEFAULT_API_DOCS_URL = "http://localhost:8080/v3/api-docs"
1112
const val DEFAULT_OPEN_API_FILE_NAME = "openapi.json"

src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGeneratorTask.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.awaitility.Durations
77
import org.awaitility.core.ConditionTimeoutException
88
import org.awaitility.kotlin.*
99
import org.gradle.api.DefaultTask
10+
import org.gradle.api.GradleException
1011
import org.gradle.api.file.DirectoryProperty
1112
import org.gradle.api.provider.Property
1213
import org.gradle.api.tasks.Input
@@ -26,8 +27,6 @@ open class OpenApiGeneratorTask : DefaultTask() {
2627
@get:OutputDirectory
2728
val outputDir: DirectoryProperty = project.objects.directoryProperty()
2829
private val waitTimeInSeconds: Property<Int> = project.objects.property(Int::class.java)
29-
@Internal
30-
val taskError: Property<String> = project.objects.property(String::class.java)
3130

3231
init {
3332
description = OPEN_API_TASK_DESCRIPTION
@@ -41,7 +40,6 @@ open class OpenApiGeneratorTask : DefaultTask() {
4140
val defaultOutputDir = project.objects.directoryProperty()
4241
defaultOutputDir.set(project.buildDir)
4342

44-
taskError.set("")
4543
apiDocsUrl.set(extension.apiDocsUrl.getOrElse(DEFAULT_API_DOCS_URL))
4644
outputFileName.set(extension.outputFileName.getOrElse(DEFAULT_OPEN_API_FILE_NAME))
4745
outputDir.set(extension.outputDir.getOrElse(defaultOutputDir.get()))
@@ -67,11 +65,8 @@ open class OpenApiGeneratorTask : DefaultTask() {
6765
val outputFile = outputDir.file(outputFileName.get()).get().asFile
6866
outputFile.writeText(gson.toJson(googleJsonObject))
6967
} catch (e: ConditionTimeoutException) {
70-
taskError.set("Timeout occurred while trying to connect to ${apiDocsUrl.get()}")
71-
this.logger.error(
72-
"Unable to connect to ${apiDocsUrl.get()} waited for ${waitTimeInSeconds.get()} seconds",
73-
e
74-
)
68+
this.logger.error("Unable to connect to ${apiDocsUrl.get()} waited for ${waitTimeInSeconds.get()} seconds", e)
69+
throw GradleException("Unable to connect to ${apiDocsUrl.get()} waited for ${waitTimeInSeconds.get()} seconds")
7570
}
7671
}
7772

src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePlugin.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import org.gradle.api.Project
77
import org.slf4j.LoggerFactory
88

99
open class OpenApiGradlePlugin : Plugin<Project> {
10-
private val LOGGER = LoggerFactory.getLogger(OpenApiGradlePlugin::class.java)
1110

1211
override fun apply(project: Project) {
1312
// Run time dependency on the following plugins
@@ -31,16 +30,17 @@ open class OpenApiGradlePlugin : Plugin<Project> {
3130
}
3231
}
3332

33+
val stopForkedSpringBoot = project.tasks.register(FINALIZER_TASK_NAME) {
34+
it.dependsOn(forkedSpringBoot)
35+
it.doLast {
36+
forkedSpringBoot.get().processHandle.abort();
37+
}
38+
}
39+
3440
// This is my task. Before I can run it I have to run the dependent tasks
3541
project.tasks.register(OPEN__API_TASK_NAME, OpenApiGeneratorTask::class.java) { openApiGenTask ->
3642
openApiGenTask.dependsOn(forkedSpringBoot)
37-
38-
openApiGenTask.doLast {
39-
forkedSpringBoot.get().processHandle.abort()
40-
if (openApiGenTask.taskError.get().isNotBlank()) {
41-
throw GradleException(openApiGenTask.taskError.get())
42-
}
43-
}
43+
openApiGenTask.finalizedBy(stopForkedSpringBoot)
4444
}
4545
}
4646

0 commit comments

Comments
 (0)