2016-08-01 12 views
1

Ich versuche ein einfaches Groovy-Projekt zu erstellen, das ein Paket mit einer Groovy-Erweiterungsmethode enthält.Ein Projekt mit Groovy-Erweiterungsmethoden darin erstellen

Wenn ich versuche, das Projekt zu kompilieren, können die Klassen, die die Erweiterungsmethode verwenden, es nicht finden. Der Deskriptor und die Klasse werden von der IDE korrekt erkannt.

Ich vermute das Problem ist, dass die Erweiterungsmethode zur Kompilierzeit benötigt wird, durch die es wahrscheinlich noch nicht kompiliert worden ist. Ich habe versucht, verschiedene SourceSets zu erstellen, aber ohne Erfolg.

dependencies { 
    compile 'org.codehaus.groovy:groovy:2.4.7' 
    compile 'org.membrane-soa:service-proxy-core:4.2.2' 
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' 
    extensionCompile 'org.codehaus.groovy:groovy:2.4.7' 
} 

sourceSets { 
    extension { 
     groovy { 
      include '**/ClosureExtension.groovy' 
     } 
    } 
    main { 
     groovy { 
      compileClasspath += extension.output 
     } 
    } 
} 

Die Erweiterung Methode lebt in src/main/groovy/com/predic8/Membran/dsl/Erweiterung und der Rest des Projekts in src/main/groovy/com/predic8/Membran/dsl /.

S.S .: Die Projektklassen sind alle mit @CompileStatic versehen.

Antwort

1

Ein Ansatz: Trennen Sie den Erweiterungscode in ein eigenes Projekt und erstellen Sie ein Jar aus diesem Projekt. Dann kann der DSL-Code in einem anderen Projekt dieses jar verwenden und die Erweiterung jar als Abhängigkeit angeben.

Dies würde eine riesige Antwort machen, also habe ich es verspottet und auf GitHub here platziert (mit allem Kredit mrhaki's post). Es gibt zwei Projekte: extension und dsl. Angenommen, Sie verstehen Multi-Projekt-Builds in Gradle, die Essenz ist diese Linie von dsl/build.gradle:

+0

Vielen Dank, sieht aus wie ein guter Ansatz! – helpermethod

Verwandte Themen