gradle - 使用其中的Groovy扩展方法构建项目

标签 gradle groovy

我正在尝试构建一个简单的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)。有两个项目:extensiondsl。假设您了解Gradle中的多项目构建,本质就是dsl/build.gradle的这一行:

compileGroovy.dependsOn tasks.getByPath(':extension:jar') 

关于gradle - 使用其中的Groovy扩展方法构建项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697952/

相关文章:

android - 在 Gradle 中的每个构建之前运行单元测试

testng - 在 TestNG 中捕获控制台输出?

grails - 使用Java类作为Grails命令

Jenkins-pipeline 从 groovy 中的属性文件中提取并设置变量

json - Groovy JsonSlurper 涉及 JSON 中逗号的问题

git - 如何知道哪个 git 分支触发了 jenkins 作业

Android Studio 不显示构建变体

gradle - Gradle:如何解决对特定文件夹的依赖关系

gradle - 将环境变量从build.gradle传递到自定义插件

sql - 检索 groovy 中最后插入的对象的 id