使用Gradle配置Swagger codegen。提供的Gradle脚本是如何工作的?

使用Gradle配置Swagger codegen。提供的Gradle脚本是如何工作的?,gradle,swagger,gradle-plugin,swagger-codegen,Gradle,Swagger,Gradle Plugin,Swagger Codegen,我在这里与此代码进行斗争: 尝试使用Swagger codegen和Gradle构建REST客户机。我是Gradle的新手,看这个例子很让人困惑,因为有多个变量/属性/名称,我不知道它们来自何处,也不知道它们是做什么的。特别是这一部分: clean.doFirst { delete(swaggerOutputDir) } configurations { swagger } sourceSets { swagger { compileClasspath

我在这里与此代码进行斗争:

尝试使用Swagger codegen和Gradle构建REST客户机。我是Gradle的新手,看这个例子很让人困惑,因为有多个变量/属性/名称,我不知道它们来自何处,也不知道它们是做什么的。特别是这一部分:

clean.doFirst {
    delete(swaggerOutputDir)
}

configurations {
    swagger
}

sourceSets {
    swagger {
        compileClasspath = configurations.swaggerCompile
        java {
            srcDir file("${project.buildDir.path}/swagger/src/main/java")
        }
    }
    main {
        compileClasspath += swagger.output
        runtimeClasspath += swagger.output
    }
    test {
        compileClasspath += swagger.output
        runtimeClasspath += swagger.output
    }
}

compileSwaggerJava.dependsOn generateApi
classes.dependsOn swaggerClasses
compileJava.dependsOn compileSwaggerJava
大摇大摆。输出-这是从哪里来的

类,compileJava,swagger类,compileSwaggerJava 这些都是什么?他们似乎没有被定义在任何地方,似乎被随机命名

自述文件说: 要生成Swagger源代码,请启动以下任务。 generateApi:生成招摇过市代码

“招摇过市”和“代码”到底从哪里来


非常感谢您的澄清,我相信这将帮助更多的人。

要完全理解此代码,您必须通读(领域特定语言)

  • A:
SourceSet表示Java源和资源的逻辑组

在块SourceSet{}中,定义了一个新的SourceSet
swagger

在以上指向源集定义的链接中,您会注意到,由于
swagger
现在是一个源集,因此它有一个属性“output”,它提供此源集的所有输出目录:因此,您可以调用
swagger.output

在每个GradleJava项目中,都假设存在主要源和测试源。这个假设是由Gradle处理Java所需的插件引入的。(此标准化布局源于。)您可以通过
main{}
test{}
配置这些源集。当然,您可能有更多的源集。
compileClasspath+=swagger.output
runtimeClasspath+=swagger.output
所做的是在编译时和运行时类路径目录中添加swagger生成的代码(或任何一般的swagger输出)。因为swagger会生成代码,所以这是预期的行为

  • 现在,关于:
任务表示构建的单个原子工作,例如编译类或生成javadoc

上面提到的java插件在创建新的源集时,还创建了一些:
compileSourceSetJava
processSourceSetResources
sourceSetClasses
(用每个源集的名称替换源集)。这就是那些
compileSwaggerJava
swagger类
是从
swagger
源集中生成的任务。
对于标准源集,这些任务:
主要源集的任务:
compileJava
processResources
classes

测试源集的任务:
compileTestJava
processTestResources
testClasses

一个任务可能与其他任务有依赖关系,或者可能被安排始终在另一个任务之后运行

这是通过任务的。其中之一是
dependsOn
属性,它解释了所提供代码的最后一块。
(注意:最后一块代码中的generateApi任务在问题中OP共享的链接中定义)

“clean.doFirst{delete(swaggerOutputDir)}”来自所提供链接中的另一块代码。我建议要么删除它,要么提供整个额外的代码块。(它只是确保输出目录为空,这样您就不会从以前的过程中生成任何源代码)非常感谢tryman!非常好的信息!不过我还是不明白最后一部分。生成API:生成招摇过市代码。我知道generateApi任务是在哪里定义的,但什么是generate和code参数?你能用这个更新你的答案吗?@BorisHamanov我认为任务调用只是“generateApi”部分,其余部分只是解释它所做的是“生成炫耀代码”。如果真是这样的话,它的措辞非常糟糕,我也感到困惑。一年半后,我仍然没有时间测试这个,但我看到这个博客,它似乎只是“generateApi”