使用Gradle配置Swagger代码源。提供的Gradle脚本如何工作?

时间:2019-02-01 20:17:22

标签: gradle swagger gradle-plugin swagger-codegen

我正在使用以下代码进行战斗:https://github.com/thebignet/swagger-codegen-gradle-plugin-example

尝试使用Swagger代码源和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

swagger.output -这是哪里来的?

类,compileJava,swaggerClasses,compileSwaggerJava 这些都是什么?它们似乎没有在任何地方定义,并且似乎是随机命名的吗?

然后自述文件说: 为了生成Swagger源代码,启动以下任务。 generateApi:生成Swagger代码

到底是大招代码来自哪里?

任何澄清都值得赞赏,我相信会帮助更多人。

1 个答案:

答案 0 :(得分:2)

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

  

SourceSet表示Java源和资源的逻辑组。   块sourceSets {}内,一个新的SourceSet swagger被定义

在上述链接到SourceSet的定义,你会发现,由于swagger现在是一个SourceSet,它具有这样的特性的输出,这提供了该SourceSet的所有的输出目录:因此,可以调用{{ 1}}

在每摇篮Java项目,存在有主要来源和测试源的假设。假设是由java插件,是一个摇篮处理的Java这是需要完成的。 (此布局源自Standard Directory Layout。)通过swagger.outputmain{}配置这些源集。当然,您可能有更多的源集。什么test{}compileClasspath += swagger.output的确,在他们的编译时和运行时类路径目录中添加招摇生成的代码(或一般而言任何招摇输出)。由于swagger会生成代码,因此这是预期的行为。

  

任务代表构建的一项基本工作,例如编译类或生成javadoc。

Java插件,如上所述,创建一个新的SourceSet时,它也产生了一些associated tasksruntimeClasspath += swagger.outputcompileSourceSetJavaprocessSourceSetResources(与每个SourceSet的名称替换SourceSet )。这就是sourceSetClasses SourceSet中生成的compileSwaggerJavaswaggerClasses
对于标准资源集,这些are
主要来源集: swaggercompileJavaprocessResources

测试源集: classescompileTestJavaprocessTestResources

  

一个任务可能对其他任务的依赖关系,或可能被安排总是层出不穷任务运行。

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