diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt index f1b1d9e74ed..bd8f7767bed 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt @@ -98,6 +98,7 @@ class OpenApiGeneratorPlugin : Plugin { outputDir.set(generate.outputDir) inputSpec.set(generate.inputSpec) inputSpecRootDirectory.set(generate.inputSpecRootDirectory) + inputSpecRootDirectorySkipMerge.set(generate.inputSpecRootDirectorySkipMerge) remoteInputSpec.set(generate.remoteInputSpec) templateDir.set(generate.templateDir) templateResourcePath.set(generate.templateResourcePath) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 48c5e88259f..8d7d31d5d1f 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -51,14 +51,28 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { /** * The Open API 2.0/3.x specification location. + * + * Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of + * changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to + * an entire directory of spec files. */ val inputSpec = project.objects.property() /** - * Local root folder with spec files + * Local root folder with spec files. + * + * By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the + * `inputSpecRootDirectorySkipMerge` property. */ val inputSpecRootDirectory = project.objects.property() + /** + * Skip bundling all spec files into a merged spec file, if true. + * + * Default false. + */ + val inputSpecRootDirectorySkipMerge = project.objects.property() + /** * The remote Open API 2.0/3.x specification URL location. */ @@ -400,6 +414,7 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { @Suppress("MemberVisibilityCanBePrivate") fun applyDefaults() { releaseNote.set("Minor update") + inputSpecRootDirectorySkipMerge.set(false) modelNamePrefix.set("") modelNameSuffix.set("") apiNameSuffix.set("") diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index a96e31d8f96..8da6bc79b0b 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -106,6 +106,10 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac /** * The Open API 2.0/3.x specification location. + * + * Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of + * changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to + * an entire directory of spec files. */ @Optional @get:InputFile @@ -113,13 +117,23 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac val inputSpec = project.objects.property() /** - * Local root folder with spec files + * Local root folder with spec files. + * + * By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the + * `inputSpecRootDirectorySkipMerge` property. */ @Optional @get:InputDirectory @PathSensitive(PathSensitivity.RELATIVE) val inputSpecRootDirectory = project.objects.property(); + /** + * Skip bundling all spec files into a merged spec file, if true. + */ + @Input + @Optional + val inputSpecRootDirectorySkipMerge = project.objects.property() + /** * Name of the file that will contain all merged specs */ @@ -625,9 +639,16 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac } inputSpecRootDirectory.ifNotEmpty { inputSpecRootDirectoryValue -> - run { - resolvedInputSpec = MergedSpecBuilder(inputSpecRootDirectoryValue, mergedFileName.getOrElse("merged")).buildMergedSpec() - logger.info("Merge input spec would be used - {}", resolvedInputSpec) + val skipMerge = inputSpecRootDirectorySkipMerge.get() + val runMergeSpec = !skipMerge + if (runMergeSpec) { + run { + resolvedInputSpec = MergedSpecBuilder( + inputSpecRootDirectoryValue, + mergedFileName.getOrElse("merged") + ).buildMergedSpec() + logger.info("Merge input spec would be used - {}", resolvedInputSpec) + } } }