使用@Grab注释编译Groovy项目时出错
我正在用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类路径已被弃用使用@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臭虫吗?或者有更好的方法来管理@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“脚本”?