我正在尝试构建一个简单的Groovy项目,其中包含带有Groovy扩展方法的包。
当我尝试编译项目时,使用扩展方法的类找不到它。 IDE正确选择了描述符和类。
我想问题是在编译时需要扩展方法,而扩展方法可能还没有被编译。
我尝试创建不同的sourceSet,但没有成功。
dependencies {
compile 'org.codehaus.groovy:groovy:2.4.7'
compile 'org.membrane-soa:service-proxy-core:4.2.2'
testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
extensionCompile 'org.codehaus.groovy:groovy:2.4.7'
}
sourceSets {
extension {
groovy {
include '**/ClosureExtension.groovy'
}
}
main {
groovy {
compileClasspath += extension.output
}
}
}
扩展方法位于src / main / groovy / com / predic8 / membrane / dsl / extension中,其余项目位于src / main / groovy / com / predic8 / membrane / dsl /中。
P.S .:所有的项目类别均以@CompileStatic进行注释。
最佳答案
一种方法:将扩展代码分成自己的项目,然后从该项目中产生一个jar。然后,在另一个项目中,DSL代码可以使用该jar并将扩展jar指定为依赖项。
这将是一个巨大的答案,因此我将其模拟并放置在GitHub here上(所有应归功于mrhaki's post)。有两个项目:extension
和dsl
。假设您了解Gradle中的多项目构建,本质就是dsl/build.gradle
的这一行:
compileGroovy.dependsOn tasks.getByPath(':extension:jar')
关于gradle - 使用其中的Groovy扩展方法构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697952/