这是我不明白的 Gradle 文档:
idea {
//if you want parts of paths in resulting files (*.iml, etc.) to be replaced by variables (Files)
pathVariables GRADLE_HOME: file('~/cool-software/gradle')
module {
//if for some reason you want to add an extra sourceDirs
sourceDirs += file('some-extra-source-folder')
它设置idea.module.sourceDirs
值。
如何在没有 Gradle 的纯 Groovy 中实现它?我想知道它潜在的唯利是图。
谢谢@Steinar,我使用以下代码修复:
def file(String p) {
new File(p)
}
class Idea {
class Module {
Set<File> excludeDirs = []
}
void module(Closure c) {
c.delegate = new Module()
c()
}
}
void idea(Closure c) {
c.delegate = new Idea()
c()
}
idea {
module {
excludeDirs += file("smth")
}
}
使用您提出的解决方案@asullaherc您无法在调用idea { module
和idea.module { ...
之间进行选择,因此我宁愿选择不同的解决方案。
这是要为案例创建的所有闭包的基类:
class SectionBase extends Closure<Object> {
SectionClosure() {
super(null)
}
Object doCall(final Closure inner) {
inner.delegate = this
inner()
}
}
这将是一个实现("Gradle 风格"):
class DependenciesSection extends SectionBase {
void compile(packageName) {
println "compile: $packageName"
}
void testCompile(packageName) {
println "testCompile: $packageName"
}
}
现在我们做一个实例:
def dependencies = new DependenciesSection()
并稍微弄乱一下:
// You can do it either this way...
dependencies {
compile 'com.my.package1'
compile 'com.my.package2'
testCompile 'com.my.package3'
}
// ...or also the other
dependencies.compile 'com.my.package4'
dependencies.testCompile 'com.my.package5'
输出将是:
compile: com.my.package1
compile: com.my.package2
testCompile: com.my.package3
compile: com.my.package4
testCompile: com.my.package5