20

Gradle を使用して Groovy プロジェクトをコンパイルしていますが、コードで @Grab アノテーションを使用すると、次のエラーが発生することに気付きました。

$グラドルコンパイル
:ビルド情報
:compileJava UP-TO-DATE
:Groovy のコンパイルに失敗しました

FAILURE: ビルドは例外で失敗しました。

* 何が悪かったのか:
タスク ':compileGroovy' の実行に失敗しました。
> org/apache/ivy/core/report/ResolveReport

(完全なスタック トレースはこちらhttp://pastebin.com/0ty4jNct )

それを機能させる唯一の方法は、「groovy」および「ivy」モジュールをgroovyクラスパスに追加することであることがわかりましたが、 groovyクラスパスは非推奨であるため、これは避けたいと思います。

これはGradleのバグですか?または @Grab 依存関係を管理するより良い方法はありますか?

4

2 に答える 2

36

@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 で依存関係を管理することです。

于 2013-08-11T16:16:59.633 に答える
4

受け入れられた解決策はコンパイル時に機能しましたが、実行時にも同様の問題がありました。以下は、グレープコードをコンパイルから完全に除外することで機能しました。

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

...gradle/config.groovyは別のファイルで、その内容は次のとおりです。

withConfig(configuration) {
  configuration.setDisabledGlobalASTTransformations(['groovy.grape.GrabAnnotationTransformation'] as Set)
}
于 2016-12-19T21:15:23.470 に答える