Zaimplementowałem niestandardowe zadanie w groovy. Jeśli podaję klasę narzędziową dla niej zaimplementowaną w groovy (X.groovy) i umieszczę ją w buildsrc, to zadanie działa. Jeśli wdrożyć równoważne klasy w Javie (Y.java) i umieścić go w tym samym katalogu, zadanie nie powiedzie się z następującym komunikatem o błędzie:Gradle nie ładuje plików klas Java skompilowanych ze źródła Java umieszczonego w buildsrc
: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.
Plik Y.class istnieje w miejscu określonym w błędzie wiadomość. Kompilacja nie powiedzie się podczas Y.java jest w jednej z typowych miejscach:
buildsrc/src/main/groovy/.../Y.java<br>
buildsrc/src/main/java/.../Y.java
dokumentacji Gradle mówi „można po prostu umieścić swój kod źródłowy budować w tym katalogu i trzymać się konwencji układu dotyczącego projektu Java/Groovy "i zostanie zastosowany domyślny skrypt kompilacji buildsrc.
Źródło: http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources
Układ projektu pozwala, aby katalogi źródłowe Groovy zawierały kod Groovy i Java.
Źródło: http://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec:groovyCompile
Aby replikować:
projekt/build.gradle:
task t (type: sample.MyTask) {
println "configuring task"
}
projekt/buildsrc/src/main/groovy/próbkę
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
Uruchomiłem powyższy kod w kontekście mojego większego projektu w IntelliJ, ale działa on w czystym projekcie poza IntelliJ. Będę musiał wyjaśnić, co w większym kontekście powoduje problem. – wjohnson