Ho implementato un'attività personalizzata in Groovy. Se fornisco una classe di utilità per l'implementazione in groovy (X.groovy) e la inserisco in buildsrc, l'attività funziona. Se possibile implementare una classe equivalente in Java (Y.java) e inserirlo nella stessa directory, l'operazione non riesce con il seguente messaggio di errore:Gradle non carica i file di classe Java compilati dal codice sorgente Java inserito in 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.
Il file Y.class esiste nel percorso specificato nell'errore Messaggio. La compilazione fallisce quando Y.java è in uno dei soliti posti:
buildsrc/src/main/groovy/.../Y.java<br>
buildsrc/src/main/java/.../Y.java
documentazione Gradle dice "si può semplicemente inserire il codice sorgente di configurazione in questa directory e rispettare la convenzione layout per un progetto/Groovy Java "e verrà applicato lo script buildsrc predefinito. Fonte: http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources
Il layout del progetto consente alle directory di origine Groovy di contenere codice Groovy e Java.
Fonte: http://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec:groovyCompile
Per replicare:
progetto/build.gradle:
task t (type: sample.MyTask) {
println "configuring task"
}
progetto/buildsrc/src// Groovy/campione principale
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
Avevo eseguito il codice sopra nel contesto del mio progetto più grande in IntelliJ, ma funziona in un progetto pulito all'esterno di IntelliJ. Dovrò risolvere ciò che nel contesto più ampio sta causando il problema. – wjohnson