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

使用@Grab注释编译Groovy项目时出错,groovy,gradle,grape,Groovy,Gradle,Grape,我正在用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/iv

我正在用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 $gradle编译 :buildInfo :compileJava最新版本 :compileGroovy失败 失败:生成失败,出现异常。 *出了什么问题: 任务“:compileGroovy”的执行失败。 >org/apache/ivy/core/report/ResolveReport (此处为完整堆栈跟踪)

我发现让它工作的唯一方法是将“groovy”和“ivy”模块添加到groovy类路径中,但我希望避免这种情况,因为groovy类路径已被弃用


这是Gradle臭虫吗?或者有更好的方法来管理@Grab依赖关系?

@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
}

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

公认的解决方案在编译时对我有效,但在运行时我仍然遇到类似的问题。通过将grape代码从编译中完全排除,以下内容对我起到了作用:

compileGroovy {
  groovyOptions.configurationScript = file("gradle/config.groovy")
}
。。。其中,
gradle/config.groovy
是一个单独的文件,其内容如下:

withConfig(configuration) {
  configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set)
}

您好,我想您的意思是:
configurations{ivy}
并在
dependencies
块中使用它,但它返回
无法推断Groovy类路径,因为在类路径:configuration:上找不到Groovy Jar:compile'
正确。当然,您必须声明一个Groovy依赖项。是否有可能拥有一个既可以独立运行(使用
@Grab
)又可以在Maven上下文中运行的Groovy“脚本”?