From 0b975327300e74e622c2008fe4edd75360b24091 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Mon, 22 Nov 2021 17:18:05 +0100 Subject: [PATCH 1/9] add Gradle plugins Maven repository to be able to reference needed plugins as project dependencies --- build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 49f4a97..158414f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,6 +23,10 @@ repositories { url = uri("https://repo.spring.io/libs-release/") } gradlePluginPortal() + maven { + name = "Gradle Plugins Maven Repository" + url = uri("https://plugins.gradle.org/m2/") + } } publishing { From 512ccfb99e4b27f1fccb3e4afad7f08a325b9387 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:36:08 +0100 Subject: [PATCH 2/9] define gradle plugins used in code (`com.github.psxpaul.execfork` and `org.springframework.boot`) as project dependencies --- build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 158414f..f8a891b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -49,7 +49,8 @@ dependencies { implementation("khttp:khttp:1.0.0") implementation("com.google.code.gson:gson:2.8.6") implementation("org.awaitility:awaitility-kotlin:4.0.3") - implementation(files("$projectDir/libs/gradle-processes-0.5.0.jar")) + implementation("com.github.psxpaul:gradle-execfork-plugin:0.1.15") + implementation("org.springframework.boot:spring-boot-gradle-plugin:2.5.6") testImplementation(gradleTestKit()) testImplementation(platform("org.junit:junit-bom:5.7.1")) From 0ce7187996892db7a2fc7fcb3e48729e3d432b48 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:39:43 +0100 Subject: [PATCH 3/9] replace `com.github.psxpaul.execfork` by `com.github.psxpaul.execfork`. introduce `bootRun` related and remove unused constants --- .../org/springdoc/openapi/gradle/plugin/Constants.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/Constants.kt b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/Constants.kt index 3d914f3..f3afed4 100644 --- a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/Constants.kt +++ b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/Constants.kt @@ -4,16 +4,15 @@ const val EXTENSION_NAME = "openApi" const val GROUP_NAME = "OpenApi" const val OPEN_API_TASK_NAME = "generateOpenApiDocs" const val OPEN_API_TASK_DESCRIPTION = "Generates the spring doc openapi file" -const val SPRING_BOOT_JAR_TASK_NAME = "bootJar" +const val SPRING_BOOT_RUN_TASK_NAME = "bootRun" +const val SPRING_BOOT_RUN_MAIN_CLASS_NAME_TASK_NAME = "bootRunMainClassName" const val FORKED_SPRING_BOOT_RUN_TASK_NAME = "forkedSpringBootRun" -const val FINALIZER_TASK_NAME = "stopForkedSpringBoot" const val DEFAULT_API_DOCS_URL = "http://localhost:8080/v3/api-docs" const val DEFAULT_OPEN_API_FILE_NAME = "openapi.json" const val DEFAULT_WAIT_TIME_IN_SECONDS = 30 const val SPRING_BOOT_PLUGIN = "org.springframework.boot" -const val PROCESS_PLUGIN = "com.github.johnrengelman.processes" +const val EXEC_FORK_PLUGIN = "com.github.psxpaul.execfork" -const val PROPS_LAUNCHER_CLASS = "org.springframework.boot.loader.PropertiesLauncher" const val CLASS_PATH_PROPERTY_NAME = "java.class.path" From 01b5b23c5e19d71d4800d4a6e6bbde8b1031beb4 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:41:08 +0100 Subject: [PATCH 4/9] remove unused `forkProperties` extension property --- .../org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt index 72d2776..fbffde7 100644 --- a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt +++ b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiExtension.kt @@ -11,6 +11,5 @@ open class OpenApiExtension @Inject constructor(project: Project) { val outputFileName: Property = project.objects.property(String::class.java) val outputDir: DirectoryProperty = project.objects.directoryProperty() val waitTimeInSeconds: Property = project.objects.property(Int::class.java) - val forkProperties: Property = project.objects.property(Any::class.java) val groupedApiMappings: MapProperty = project.objects.mapProperty(String::class.java, String::class.java) } From c918a4360f174857f147518ab8f78fd5ee4495bb Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:44:15 +0100 Subject: [PATCH 5/9] change `forkedSpringBoot` task implementation: use `bootRun` task as a source for forked process, implemented with the aid of `com.github.psxpaul.execfork` gradle plugin --- .../gradle/plugin/OpenApiGradlePlugin.kt | 70 +++++++------------ 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePlugin.kt b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePlugin.kt index c5864da..0054424 100644 --- a/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePlugin.kt +++ b/src/main/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePlugin.kt @@ -2,11 +2,11 @@ package org.springdoc.openapi.gradle.plugin +import com.github.psxpaul.task.JavaExecFork import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.logging.Logging -import org.gradle.api.provider.Property -import java.util.* +import org.springframework.boot.gradle.tasks.run.BootRun open class OpenApiGradlePlugin : Plugin { private val logger = Logging.getLogger(OpenApiGradlePlugin::class.java) @@ -14,60 +14,42 @@ open class OpenApiGradlePlugin : Plugin { override fun apply(project: Project) { // Run time dependency on the following plugins project.plugins.apply(SPRING_BOOT_PLUGIN) - project.plugins.apply(PROCESS_PLUGIN) + project.plugins.apply(EXEC_FORK_PLUGIN) project.extensions.create(EXTENSION_NAME, OpenApiExtension::class.java, project) project.afterEvaluate { - // Spring boot jar task - val bootJarTask = project.tasks.named(SPRING_BOOT_JAR_TASK_NAME) - - val extension: OpenApiExtension = project.extensions.run { - getByName(EXTENSION_NAME) as OpenApiExtension - } + // The task, used to run the Spring Boot application (`bootRun`) + val bootRunTask = project.tasks.named(SPRING_BOOT_RUN_TASK_NAME) + // The task, used to resolve the application's main class (`bootRunMainClassName`) + val bootRunMainClassNameTask = project.tasks.named(SPRING_BOOT_RUN_MAIN_CLASS_NAME_TASK_NAME) // Create a forked version spring boot run task - val forkedSpringBoot = project.tasks.register(FORKED_SPRING_BOOT_RUN_TASK_NAME, AnnotatedFork::class.java) { fork -> - fork.dependsOn(bootJarTask) - - fork.onlyIf { - val bootJar = bootJarTask.get().outputs.files.first() - fork.commandLine = listOf("java", "-cp") + - listOf("$bootJar") + extractProperties(extension.forkProperties) + listOf(PROPS_LAUNCHER_CLASS) - true - } - } - - val stopForkedSpringBoot = project.tasks.register(FINALIZER_TASK_NAME) { - it.dependsOn(forkedSpringBoot) - it.doLast { - forkedSpringBoot.get().processHandle.abort() + val forkedSpringBoot = + project.tasks.register(FORKED_SPRING_BOOT_RUN_TASK_NAME, JavaExecFork::class.java) { fork -> + fork.dependsOn(bootRunMainClassNameTask) + + fork.onlyIf { + val bootRun = bootRunTask.get() as BootRun + + // copy all system properties, excluding those starting with `java.class.path` + fork.systemProperties = + bootRun.systemProperties.filter { !it.key.startsWith(CLASS_PATH_PROPERTY_NAME) } + + fork.workingDir = bootRun.workingDir + fork.args = bootRun.args?.toMutableList() ?: mutableListOf() + fork.classpath = bootRun.classpath + fork.main = bootRun.mainClass.get() + fork.jvmArgs = bootRun.jvmArgs + fork.environment = bootRun.environment + true + } } - } // This is my task. Before I can run it I have to run the dependent tasks project.tasks.register(OPEN_API_TASK_NAME, OpenApiGeneratorTask::class.java) { openApiGenTask -> openApiGenTask.dependsOn(forkedSpringBoot) - openApiGenTask.finalizedBy(stopForkedSpringBoot) } } } - - private fun extractProperties(forkProperties: Property) = - if (forkProperties.isPresent) { - when (val element = forkProperties.get()) { - is String -> element - .split("-D") - .filter { it.isNotEmpty() } - .filterNot { it.startsWith(CLASS_PATH_PROPERTY_NAME, true) } - .map { "-D${it.trim()}" } - is Properties -> element - .filterNot { it.key.toString().startsWith(CLASS_PATH_PROPERTY_NAME, true) } - .map { "-D${it.key}=${it.value}" } - else -> { - logger.warn("Failed to use the value set for 'forkProperties'. Only String and Properties objects are supported.") - emptyList() - } - } - } else emptyList() } From 85a8f90658688639316a8fdb88ddf8b36a41f63c Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:48:12 +0100 Subject: [PATCH 6/9] change test configurations to be aligned with the new implementation (use `bootRun` configuration instead of `forkProperties`) --- .../gradle/plugin/OpenApiGradlePluginTest.kt | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt b/src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt index d834ce0..0e454a6 100644 --- a/src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt +++ b/src/test/kotlin/org/springdoc/openapi/gradle/plugin/OpenApiGradlePluginTest.kt @@ -24,7 +24,6 @@ class OpenApiGradlePluginTest { id 'java' id 'org.springframework.boot' version '2.4.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' - id 'com.github.johnrengelman.processes' version '0.5.0' id 'org.springdoc.openapi-gradle-plugin' } @@ -89,11 +88,11 @@ class OpenApiGradlePluginTest { } @Test - fun `using forked properties`() { + fun `using properties`() { buildFile.writeText( """$baseBuildGradle - openApi{ - forkProperties = "-Dspring.profiles.active=multiple-endpoints -Dsome.second.property=someValue" + bootRun { + args = ["--spring.profiles.active=multiple-endpoints", "--some.second.property=someValue"] } """.trimMargin() ) @@ -106,8 +105,8 @@ class OpenApiGradlePluginTest { fun `using forked properties via System properties`() { buildFile.writeText( """$baseBuildGradle - openApi{ - forkProperties = System.properties + bootRun { + systemProperties = System.properties } """.trimMargin() ) @@ -120,8 +119,10 @@ class OpenApiGradlePluginTest { fun `configurable wait time`() { buildFile.writeText( """$baseBuildGradle - openApi{ - forkProperties = "-Dspring.profiles.active=slower" + bootRun { + args = ["--spring.profiles.active=slower"] + } + openApi{ waitTimeInSeconds = 60 } """.trimMargin() @@ -135,9 +136,11 @@ class OpenApiGradlePluginTest { fun `using different api url`() { buildFile.writeText( """$baseBuildGradle + bootRun { + args = ["--spring.profiles.active=different-url"] + } openApi{ apiDocsUrl = "http://localhost:8080/secret-api-docs" - forkProperties = "-Dspring.profiles.active=different-url" } """.trimMargin() ) @@ -153,10 +156,12 @@ class OpenApiGradlePluginTest { buildFile.writeText( """$baseBuildGradle + bootRun { + args = ["--spring.profiles.active=multiple-grouped-apis"] + } openApi{ groupedApiMappings = ["http://localhost:8080/v3/api-docs/groupA": "$outputJsonFileNameGroupA", "http://localhost:8080/v3/api-docs/groupB": "$outputJsonFileNameGroupB"] - forkProperties = "-Dspring.profiles.active=multiple-grouped-apis" } """.trimMargin() ) @@ -174,12 +179,14 @@ class OpenApiGradlePluginTest { buildFile.writeText( """$baseBuildGradle + bootRun { + args = ["--spring.profiles.active=multiple-grouped-apis"] + } openApi{ apiDocsUrl = "http://localhost:8080/v3/api-docs/groupA" outputFileName = "$outputJsonFileNameSingleGroupA" groupedApiMappings = ["http://localhost:8080/v3/api-docs/groupA": "$outputJsonFileNameGroupA", "http://localhost:8080/v3/api-docs/groupB": "$outputJsonFileNameGroupB"] - forkProperties = "-Dspring.profiles.active=multiple-grouped-apis" } """.trimMargin() ) From ecf67d4bf88c9f75f43a6cb1742446684267ef54 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:50:10 +0100 Subject: [PATCH 7/9] remove/replace `com.github.johnrengelman.processes` plugin references --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 131df9a..6f93b9a 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,10 @@ The plugin is built on Gradle version 6.4.1. Dependencies ------------ -This plugin has a runtime dependency on the the following plugins: +This plugin has a runtime dependency on the following plugins: 1. Spring Boot Gradle plugin - `org.springframework.boot` -2. Gradle process plugin - `com.github.johnrengelman.processes` - -Hence these plugins also needs to be added to your Gradle builds. +2. Gradle process plugin - `com.github.psxpaul.execfork` Note: You will also need the springdoc-core jar file to be present in your Spring Boot application. @@ -32,7 +30,6 @@ Gradle Groovy DSL ```groovy plugins { id "org.springframework.boot" version "2.3.0.RELEASE" - id "com.github.johnrengelman.processes" version "0.5.0" id "org.springdoc.openapi-gradle-plugin" version "1.3.3" } ``` @@ -41,7 +38,6 @@ Gradle Kotlin DSL ```groovy plugins { id("org.springframework.boot") version "2.3.0.RELEASE" - id("com.github.johnrengelman.processes") version "0.5.0" id("org.springdoc.openapi-gradle-plugin") version "1.3.3" } ``` From c3a6a8a1eaca01f5d7a59245ee0b127de6c8790b Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 16:50:48 +0100 Subject: [PATCH 8/9] remove unused/replaced stuff --- libs/gradle-processes-0.5.0.jar | Bin 34120 -> 0 bytes .../openapi/gradle/plugin/AnnotatedFork.kt | 43 ------------------ 2 files changed, 43 deletions(-) delete mode 100644 libs/gradle-processes-0.5.0.jar delete mode 100644 src/main/kotlin/org/springdoc/openapi/gradle/plugin/AnnotatedFork.kt diff --git a/libs/gradle-processes-0.5.0.jar b/libs/gradle-processes-0.5.0.jar deleted file mode 100644 index c2261243d8e18a320613220a389ac0b19bb9c178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34120 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 i`WI3F_x*prEtQo30l2zfy}}3l$O0VRThF_? { - return super.getArgumentProviders() - } -} From 436d54df50141458ea5acfca0b0b61d43fcd9ca9 Mon Sep 17 00:00:00 2001 From: Igor Lubimov Date: Wed, 24 Nov 2021 17:02:59 +0100 Subject: [PATCH 9/9] fix referenced Gradle version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f93b9a..aad43b8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The plugin does this with help of springdoc-openapi-core. Compatibility Notes ------------------- -The plugin is built on Gradle version 6.4.1. +The plugin is built on Gradle version 7.0. Dependencies ------------