6

groovy でカスタム タスクを実装しました。groovy (X.groovy) で実装されたユーティリティ クラスを提供し、それをbuildsrcに配置すると、タスクは機能します。Java で同等のクラス (Y.java) を実装して同じディレクトリに配置すると、次のエラー メッセージが表示されてタスクが失敗します。

:buildsrc:compileGroovystartup failed:
General error during conversion: Could not load class 'com.myinc.gradle.api.data.Y' 
from file:/project/buildsrc/build/classes/main/com/myinc/gradle/api/data/Y.class.

Y.class ファイルは、エラー メッセージで指定された場所に存在します。Y.java が通常の場所のいずれかにある場合、ビルドは失敗します。

buildsrc/src/main/groovy/.../Y.java<br>
buildsrc/src/main/java/.../Y.java

Gradle のドキュメントには、「ビルド ソース コードをこのディレクトリに置くだけで、Java/Groovy プロジェクトのレイアウト規則に従うことができます」と記載されており、デフォルトの buildsrc ビルド スクリプトが適用されます。
ソース: http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources

プロジェクト レイアウトでは、Groovy ソース ディレクトリに Groovy および Java コードを含めることができます。
ソース: http://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec:groovyCompile

複製するには:

プロジェクト/build.gradle:

task t (type: sample.MyTask) {
  println "configuring task"
}

project/buildsrc/src/main/groovy/sample


MyTask.groovy

package sample

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class MyTask extends DefaultTask {
  @TaskAction
  public void task() {
    println 'task action'
    new X().m()
//  new Y().m()    // uncommenting this line should generate an error when you build 't'
  }
}

X.groovy

package sample;
class X {
  void m() {
    println "x.m"
  }
}

Y.java

package sample;
public class Y {
  void m() {
    System.out.println("y.m");
  }
}

OSX 10.8.4、IntelliJ 12.1、Gradle 1.8

4

2 に答える 2

2

より大きなコンテキストでの問題は、JDK8 のアーリー アクセス バージョンと、Gradle 1.8 の groovyCompile のクラス ローダーが期待するものとの間のバイトコード バージョンの非互換性でした。IntelliJ の言語レベルを JDK7 に戻すと、すべてが正常に機能しました。

于 2013-10-11T19:58:38.183 に答える