我正在尝试构建一个简单的Groovy项目,该项目包含一个带有Groovy扩展方法的包。
当我尝试编译项目时,使用扩展方法的类无法找到它。 IDE正确地选择了描述符和类。
我想问题是在编译时需要扩展方法,它可能还没有被编译。 我尝试过创建不同的sourceSets但没有成功。
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注释。
答案 0 :(得分:1)
一种方法:将扩展代码分离到自己的项目中,并从该项目中生成一个jar。然后,在另一个项目中,DSL代码可以使用该jar并将扩展jar 指定为依赖。
这会产生一个巨大的答案,所以我嘲笑它并把它放在GitHub上here(我应该归功于mrhaki's post)。有两个项目:extension
和dsl
。假设您了解Gradle中的多项目构建,其实质是来自dsl/build.gradle
:
compileGroovy.dependsOn tasks.getByPath(':extension:jar')