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和代码到底是从哪里来的?
任何澄清都非常感谢,我相信会帮助更多的人。
要完全理解此代码,您必须通读Gradle DSL(特定领域语言)
SourceSet 表示 Java 源和资源的逻辑组。
在块 sourceSets{ } 中,swagger定义了一个新的 SourceSet 。
在上面指向 SourceSet 定义的链接中,您会注意到,由于swagger现在是一个 SourceSet,它具有属性 'output',该属性提供此 SourceSet 的所有输出目录:因此,您可以调用swagger.output
在每个 Gradle Java 项目中,都假设有主要来源和测试来源。这个假设是由java插件引入的,这是 Gradle 处理 Java 所必需的。(此标准化布局源于标准目录布局。)您可以通过main{}和配置这些源集test{}。当然,您可能有更多的源集。
什么compileClasspath += swagger.output和runtimeClasspath += swagger.output做,在他们的编译时和运行时路径目录添加招摇生成的代码(或任何一般招摇输出)。由于 swagger 会生成代码,这是预期的行为。
Task 代表构建的单个原子工作,例如编译类或生成 javadoc。
上面提到的 java 插件,在创建新的 SourceSet 时,还会创建一些关联的任务: compileSourceSetJava,processSourceSetResources和sourceSetClasses(用每个 SourceSet 的名称替换 SourceSet)。这就是这些compileSwaggerJava,swaggerClasses都是从生成的任务swaggerSourceSet。
对于标准sourcesets,这些任务是:
主要sourceset的任务: compileJava,processResources,classes
测试sourceset的任务: compileTestJava,processTestResources,testClasses
一个任务可能依赖于其他任务,或者可能被安排为总是在另一个任务之后运行。
这是通过任务的属性配置的。其中之一是dependsOn解释您提供的代码的最后一个块的属性。(注意:最后一段代码中的 generateApi 任务,在问题中 OP 共享的链接中定义)