2013-08-11 3 views
15

Я компиляцией Groovy проекта с Gradle, но я заметил, что когда я использую @Grab аннотаций в моем коде, я получаю следующее сообщение об ошибке:Ошибка компиляции 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 устарел.

Является ли это ошибкой Gradle? или есть лучший способ управлять зависимостью @Grab?

ответ

23

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

+0

Привет, Я думаю, вы имели в виду: 'configurations {ivy}' и использовать его в блоке 'dependencies', но он возвращает' Can not infer Groovy path path, потому что Groovy Jar не был найден в пути класса: configuration ': compile'' – pditommaso

+0

Right. И, конечно же, вам придется объявить зависимость Groovy. –

+1

Возможно ли иметь «скрипт» Groovy, который можно запускать как автономно (с помощью '@ Grab'), так и в контексте Maven? – MarkHu

0

Принятое решение работало для меня во время компиляции, но у меня все еще были подобные проблемы во время выполнения. Далее работал для меня, исключая код винограда из компиляции вообще:

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

... где gradle/config.groovy представляет собой отдельный файл, содержимое которого были:

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

 Смежные вопросы

  • Нет связанных вопросов^_^