我正在使用以下代码进行战斗: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代码
到底是大招和代码来自哪里?
任何澄清都值得赞赏,我相信会帮助更多人。
答案 0 :(得分:2)
要完全理解此代码,您必须通读Gradle DSL(特定于域的语言)
SourceSet表示Java源和资源的逻辑组。 块sourceSets {}内,一个新的SourceSet
swagger
被定义
在上述链接到SourceSet的定义,你会发现,由于swagger
现在是一个SourceSet,它具有这样的特性的输出,这提供了该SourceSet的所有的输出目录:因此,可以调用{{ 1}}
在每摇篮Java项目,存在有主要来源和测试源的假设。假设是由java
插件,是一个摇篮处理的Java这是需要完成的。 (此布局源自Standard Directory Layout。)通过swagger.output
和main{}
配置这些源集。当然,您可能有更多的源集。什么test{}
和compileClasspath += swagger.output
的确,在他们的编译时和运行时类路径目录中添加招摇生成的代码(或一般而言任何招摇输出)。由于swagger会生成代码,因此这是预期的行为。
任务代表构建的一项基本工作,例如编译类或生成javadoc。
Java插件,如上所述,创建一个新的SourceSet时,它也产生了一些associated tasks:runtimeClasspath += swagger.output
,compileSourceSetJava
和processSourceSetResources
(与每个SourceSet的名称替换SourceSet )。这就是sourceSetClasses
SourceSet中生成的compileSwaggerJava
,swaggerClasses
。
对于标准资源集,这些are:
主要来源集: swagger
,compileJava
,processResources
和
测试源集: classes
,compileTestJava
,processTestResources
一个任务可能对其他任务的依赖关系,或可能被安排总是层出不穷任务运行。
这是通过任务的properties配置的。其中之一,是testClasses
属性,它解释了你提供的代码这最后一块。
(注意:最后一块代码中的generateApi任务是在问题中的OP共享的链接中定义的)