Ошибка компиляции проекта Groovy с использованием аннотации @Grab

Я компилирую проект Groovy с Gradle, но я заметил, что когда я использую аннотацию @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 classpath устарел.

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

Ответы

Ответ 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.

Ответ 2

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

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

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

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