20

我正在用 Gradle 编译一个 Groovy 项目,但我注意到当我在代码中使用 @Grab 注释时,出现以下错误:

$ gradle 编译
:buildInfo
:compileJava UP-TO-DATE
:compileGroovy 失败

FAILURE:构建失败并出现异常。

* 什么地方出了错:
任务“:compileGroovy”执行失败。
> org/apache/ivy/core/report/ResolveReport

(这里的完整堆栈跟踪http://pastebin.com/0ty4jNct

我发现让它工作的唯一方法是将“groovy”和“ivy”模块添加到groovy类路径中,但我想避免这种情况,因为不推荐使用groovy类路径。

这是一个 Gradle 错误吗?还是有更好的方法来管理 @Grab 依赖项?

4

2 回答 2

36

@Grab旨在用于未预编译的独立脚本,并且您通常不会将其与已编译的代码一起使用。如果这样做,您可能需要将 Ivy 添加到groovyClasspath. 就像是:

repositories {
    mavenCentral()
}

configurations {
    ivy
}

dependencies {
    ivy "org.apache.ivy:ivy:2.3.0"
    compile "org.codehaus.groovy:groovy-all:2.1.5"
}  

tasks.withType(GroovyCompile) {
    groovyClasspath += configurations.ivy
}

也就是说,更好的方法是使用 Gradle 管理依赖项。

于 2013-08-11T16:16:59.633 回答
4

接受的解决方案在编译时对我有用,但在运行时我仍然遇到类似的问题。通过从编译中完全排除葡萄代码,以下内容对我有用:

compileGroovy {
  groovyOptions.configurationScript = file("gradle/config.groovy")
}

...在哪里gradle/config.groovy是一个单独的文件,其内容是:

withConfig(configuration) {
  configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set)
}
于 2016-12-19T21:15:23.470 回答