使用@Grab注释编译Groovy项目时出错

pdi*_*aso 19 groovy ruby-grape gradle

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

$ gradle compile
:buildInfo
:compileJava UP-TO-DATE
:compileGroovy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileGroovy'.
> org/apache/ivy/core/report/ResolveReport

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

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

这是Gradle bug吗?还是有更好的方法来管理@Grab依赖?

Pet*_*ser 32

@Grab用于未预编译的独立脚本,通常不会将它与编译代码一起使用.如果你这样做,你可能需要添加常春藤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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 是否有可能有一个既可以独立运行(使用“@Grab”)也可以在 Maven 上下文中运行的 Groovy“脚本”? (2认同)

Ste*_*ell 5

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

compileGroovy {
  groovyOptions.configurationScript = file("gradle/config.groovy")
}
Run Code Online (Sandbox Code Playgroud)

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

withConfig(configuration) {
  configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set)
}
Run Code Online (Sandbox Code Playgroud)