groovyでカスタムタスクを実装しました。 groovy(X.groovy)で実装されているユーティリティクラスを提供し、それをbuildsrcに配置すると、このタスクは機能します。私は、Javaでの同等クラス(Y.java)を実装し、同じディレクトリに配置した場合、タスクは、次のエラーメッセージで失敗しますJavaソースからコンパイルされた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"
}
プロジェクト/ BUILDSRC/srcに/メイン/グルーヴィー/サンプル
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
私はIntelliJの私の大きなプロジェクトのコンテキストで上記のコードを実行しましたが、IntelliJ以外のクリーンなプロジェクトで動作します。私は大きな文脈で何が問題を引き起こしているのかを整理しなければならないでしょう。 – wjohnson