如何使gradle任务依赖于springdoc-openapi-gradle-plugin中的“generateOpenApiDocs”任务(使用KotlinDSL)?

xlpyo6sf  于 2022-11-14  发布在  Spring
关注(0)|答案(1)|浏览(106)

我对Gradle还不熟悉,我想自动执行以下任务:

  • 从SpringBoot应用程序生成openapi.json文件(使用springdoc-openapi-gradle-plugin
  • 然后使用此生成的文件创建客户端SDK(使用Gradle Swagger生成器插件)

我的build.gradle.kts看起来像这样:

plugin{
  id("org.springframework.boot") version "2.7.4"
  id("io.spring.dependency-management") version "1.0.14.RELEASE"

  //springdoc-openapi-gradle-plugin
  id("org.springdoc.openapi-gradle-plugin") version "1.4.0"

  //https://github.com/int128/gradle-swagger-generator-plugin
  id("org.hidetake.swagger.generator") version "2.19.2"

  ...
}

repositories {
  mavenCentral()
}

dependencies{
  swaggerCodegen("org.openapitools:openapi-generator-cli:3.3.4")
  ...
}

swaggerSources {
   register("petstore") {
     setInputFile(file("${buildDir}/openapi.json"))
     code.language = "typescript-fetch"
   }
}

// ---!!! the following makes my gradle script fail !!!---
tasks.named("generateSwaggerCodePetstore"){
  dependsOn(tasks.generateOpenApiDocs)
}

我的问题是,当我想运行任何gradle任务时,我会得到以下输出:
失败:生成失败,出现异常.

  • 其中:构建文件“[...]/build.gradle.kts”行:153
  • 问题:在根项目“getmad”中未找到名为“generateOpenApiDocs”的任务。

如果我从生成脚本中删除以下代码...

tasks.named("generateSwaggerCodePetstore"){
  dependsOn(tasks.generateOpenApiDocs)
}

...我可以轻松地运行以下命令:
$ ./gradlew clean generateOpenApiDocs
然后道:
$ ./gradlew generateSwaggerCode
但不知何故,我无法链接这些命令,也无法在我的构建脚本中编写这些任务之间的程序依赖关系。
我有一个单一的gradle项目(还没有子项目)。
有人能解决我的问题吗?

jdgnovmf

jdgnovmf1#

任务generateOpenApiDocs尚未配置,因此您不能仅通过tasks的属性访问它。您必须通过其他方式访问它:

tasks.named("generateSwaggerCodePetstore") {
    dependsOn(tasks.named("generateOpenApiDocs"))
}

顺序将如下所示:

$ ./gradlew generateSwaggerCodePetstore --dry-run
:app:compileJava SKIPPED
:app:processResources SKIPPED
:app:classes SKIPPED
:app:bootRunMainClassName SKIPPED
:app:forkedSpringBootRun SKIPPED
:app:generateOpenApiDocs SKIPPED
:app:forkedSpringBootStop SKIPPED
:app:generateSwaggerCodePetstore SKIPPED

BUILD SUCCESSFUL in 3s

相关问题