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

Bor*_*nov 4 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
Run Code Online (Sandbox Code Playgroud)

swagger.output - 这是从哪里来的?

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

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

Swagger代码到底是从哪里来的?

任何澄清都非常感谢,我相信会帮助更多的人。

try*_*man 8

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

SourceSet 表示 Java 源和资源的逻辑组。

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

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

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

Task 代表构建的单个原子工作,例如编译类或生成 javadoc。

上面提到的 java 插件,在创建新的 SourceSet 时,还会创建一些关联的任务: compileSourceSetJava,processSourceSetResourcessourceSetClasses(用每个 SourceSet 的名称替换 SourceSet)。这就是这些compileSwaggerJavaswaggerClasses都是从生成的任务swaggerSourceSet。
对于标准sourcesets,这些任务
主要sourceset的任务: compileJavaprocessResourcesclasses
测试sourceset的任务: compileTestJavaprocessTestResourcestestClasses

一个任务可能依赖于其他任务,或者可能被安排为总是在另一个任务之后运行。

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