2014-02-20 10 views
8

Ich versuche, eine Groovy-Klasse aus meiner Build.Gradle-Datei zu starten. Ich folge der Richtung in the use guide aber ich bekomme einen Fehler.Verwenden groovy Klassen in Gradle Build

Die Build-Datei ist:

apply plugin: 'java' 
apply plugin: 'groovy' 

    main { 
    java { 
     srcDirs = ["$projectDir/src/java"] 
    } 
    groovy { 
     srcDirs = ["$projectDir/src/groovy"] 
    } 
    } 

    dependencies { 
     compile 'org.codehaus.groovy:groovy-all:2.2.0', files(....) 
    } 

    task fooTask << { 
     groovyClass groovyClass = new groovyClass() 
     groovyClass.foo() 
    } 

Die groovy Klasse ist sehr einfach:

public class groovyClass { 

      public void foo() { 
        println 'foo' 
      } 
    } 

aber wenn ich versuche, zu laufen gradlew zu kompilieren fooTask bekomme ich folgende Fehlermeldung:

Klasse kann nicht aufgelöst werden groovyClass

Irgendeine Idee warum?

Dank

+0

ich schon versuchte die Lösung vorgeschlagen in [dieser Beitrag] (http://stackoverflow.com/questions/11580057/using-class-from-groovy-file-located-in-andere-folder-gradle), aber das Problem besteht immer noch – jonatzin

Antwort

16

Sie müssen die Klasse buildSrc hinzufügen, wenn Sie es aus dem Build (und nicht in einer einfachen Exec-Aufgabe) verweisen möchten. Diese Verzeichnisstruktur gegeben:

|-buildSrc 
| |- src 
|  |- main 
|   |- groovy 
|    |- GroovyClass.groovy 
|- build.gradle 

Wo GroovyClass.groovy ist:

class GroovyClass { 
    void foo() { 
     println 'foo' 
    } 
} 

Und build.gradle ist:

apply plugin: 'groovy' 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.2.1' 
} 

task fooTask << { 
    GroovyClass g = new GroovyClass() 
    g.foo() 
} 

Dann gradle fooTask läuft der Ausgang ergibt:

$ gradle fooTask 
:buildSrc:compileJava UP-TO-DATE 
:buildSrc:compileGroovy UP-TO-DATE 
:buildSrc:processResources UP-TO-DATE 
:buildSrc:classes UP-TO-DATE 
:buildSrc:jar UP-TO-DATE 
:buildSrc:assemble UP-TO-DATE 
:buildSrc:compileTestJava UP-TO-DATE 
:buildSrc:compileTestGroovy UP-TO-DATE 
:buildSrc:processTestResources UP-TO-DATE 
:buildSrc:testClasses UP-TO-DATE 
:buildSrc:test UP-TO-DATE 
:buildSrc:check UP-TO-DATE 
:buildSrc:build UP-TO-DATE 
:fooTask 
foo 

BUILD SUCCESSFUL 

Total time: 4.604 secs 
+2

Do you weiß, ob es eine Möglichkeit gibt, zu ändern, wo Gradle nach den Klassen sucht, also wird es statt buildSrc/src/main/groovy bei src/main/groovy suchen? – jonatzin

+0

Nicht, dass ich davon weiß. Um den Build zu starten, muss der Build zuerst ausgeführt werden, damit Sie eine Hühner- und Eissituation erhalten. Nicht sicher, ob ein symbolischer Link in buildSrc zur groovy-Datei in SRC funktioniert, wenn die Datei in beiden benötigt wird und Sie nicht zwei Dateien verwalten wollen? –

+0

Hmmm rate so, danke für die Hilfe – jonatzin