2013-10-11 9 views
6

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

risposta

1

solo un'idea: Forse è legato alla dichiarazione di pacchetto. Java è più schizzinoso qui che groovy e si aspetta il file sorgente in una directory appropriata. Non ho potuto riprodurre il tuo problema. Puoi fornire un piccolo progetto autosufficiente che dimostri il tuo problema?

applausi, René

+0

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

2

Il problema nel contesto più ampio era un'incompatibilità nelle versioni bytecode tra la prima versione di accesso di JDK8 e ciò che la classe loader in groovyCompile in Gradle 1,8 aspetta. Quando ho cambiato i livelli di lingua in IntelliJ a JDK7, tutto ha funzionato bene.

Problemi correlati