使用Groovy扩展方法构建项目

时间:2016-08-01 11:41:33

标签: gradle groovy

我正在尝试构建一个简单的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注释。

1 个答案:

答案 0 :(得分:1)

一种方法:将扩展代码分离到自己的项目中,并从该项目中生成一个jar。然后,在另一个项目中,DSL代码可以使用该jar并将扩展jar 指定为依赖

这会产生一个巨大的答案,所以我嘲笑它并把它放在GitHub上here(我应该归功于mrhaki's post)。有两个项目:extensiondsl。假设您了解Gradle中的多项目构建,其实质是来自dsl/build.gradle

的这一行
compileGroovy.dependsOn tasks.getByPath(':extension:jar')