【问题标题】:Error compiling a Groovy project using @Grab annotation使用@Grab 注解编译 Groovy 项目时出错
【发布时间】:2013-08-12 23:48:59
【问题描述】:

我正在使用 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 依赖项?

【问题讨论】:

    标签: groovy gradle grape


    【解决方案1】:

    @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 管理依赖项。

    【讨论】:

    • 嗨,我想你的意思是:configurations { ivy } 并在 dependencies 块中使用它,但它返回 Cannot infer Groovy class path because no Groovy Jar was found on class path: configuration ':compile'
    • 对。当然,您必须声明一个 Groovy 依赖项。
    • 是否有可能拥有一个既可以独立运行(使用@Grab)也可以在 Maven 上下文中运行的 Groovy“脚本”?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2018-11-01
      • 1970-01-01
      相关资源
      最近更新 更多