Ошибка компиляции проекта 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)
}