我是 groovy-gradle 领域的新手,现在我正在学习多个在线类(class),但我在这里遗漏了一些东西。
我会给你和例子。这将创建一个 Jar 文件:
apply plugin: 'java' // 1. Apply the Java plugin to the project
sourceSets {
main {
java {
srcDir 'java' // 3. Add 'java' directory as a source directory
}
}
}
jar {
manifest {
attributes 'Implementation-Version': '1.0' // 2. Add manifest attribute
}
}
您可以在任何地方找到此解决方案,但没有明确的解释。
现在,可以通过以下方式申请插件:
Plugin.apply(T)
我假设 Plugin 是对象实例, apply 是它的方法, T 是一个参数。那么什么是
apply plugin "java"
?还有一种叫做 sourceSets 的东西。它可能是采用闭包参数的方法,也可能是由于 groovy 生成的默认 getter 而采用闭包作为参数的属性。
我不知道,因为在 groovy 中等号是可选的,括号是可选的。--- 非常创新!!!!!!!!!
最后还有main这个东西。我找不到它是什么,我一直在到处寻找它,甚至在这里:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.SourceSet.html
而这个'main'-ting包含一个叫做java的东西(看起来像SourceDirectorySet的实例),它包含方法srcDir,它将一个字符串作为一个参数。
这对你有意义吗?
如何从这里提取信息:
https://docs.gradle.org/current/dsl/ ,并在构建中使用它?
我在这里想念什么?
最佳答案
我在我的手机上,所以很难解释所有 Gradle 的魔力,但这应该对你有所帮助。
有一个隐含的 Project范围内的实例以及您在 gradle 脚本中看到的大部分内容都将委托(delegate)给它。
例如
apply plugin: 'java'
相当于
getProject().apply([plugin: 'java'])
您可以在 writing a custom plugin section 中阅读更多内容但是有一个属性文件将“java”映射到JavaPlugin
当您应用“java”插件时,这将“混合”JavaPluginConvention到项目中(因此您现在可以在 java 中调用 getSourceSets(),它可以在 groovy 中缩写为“sourceSets”)
在 Gradle 的 DSL 中得到大量使用的一个特性是 Groovy 的 methodMissing(...)。 .所以
sourceSets.main { ... }
实际上会被动态委托(delegate)给
sourceSets.getByName('main').configure { ... }
另一个“魔法”来源的特性是在 groovy 中你可以编写
def a = new A()
a.foo = 'bar'
a.baz('x')
作为
def a = new A()
a.with {
foo = 'bar'
baz('x')
}
希望您可以看到闭包中的所有属性/方法引用都委托(delegate)给“a”实例。这种配置风格有助于 gradle 脚本保持简洁。
见 the with method
关于gradle - gradle/groovy 脚本中的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53359992/