2016-04-15 4 views
2

Ich habe eine Java-Bibliothek von Gradle 2.4, die von einigen Java 6-Anwendungen verwendet wird, einige von Java 7, andere von Java 8, und einige, die Groovy 2.x sind. Als solche wie rückwärtskompatibel wie möglich sein, ich schreibe die lib sowohl ein haben sourceCompatibility sowie ein targetCompatibility von 1.6:Verwenden von Gradle und Groovy/Spock zum Testen einer Java 6-Lib oder -App

build.gradle 
============ 
apply plugin: 'java' 
apply plugin: 'groovy' 

sourceCompatibility = '1.6' 
targetCompatibility = '1.6' 

repositories { 
    mavenCentral() 
    jcenter() 
} 

dependencies { 
    compile (
     'org.slf4j:slf4j-api:1.7.12' 
    ) 

    testCompile (
     'org.codehaus.groovy:groovy-all:2.4.6' 
     ,'org.spockframework:spock-core:1.0-groovy-2.4' 
    ) 
} 

Allerdings gibt es keinen Grund, warum ich nicht in der Lage sein schreibe meine Komponententests in Groovy/Spock. Solange Groovy nicht Teil des main/compile/runtime classpath ist, sollte ich meine Tests in jeder beliebigen JVM-Sprache schreiben können! Und ich wähle Groovy/Spock!

Das Problem ist, ich habe so etwas noch nie gemacht. I denke, Ich muss Groovy-All und Spock zum Klassenpfad testCompile hinzufügen, aber ich bin mir nicht sicher, ob ich das Groovy-Plugin oder nicht, sowie alle anderen Konfigurationen anwenden muss.

Nochmal:

  • Der Haupt Kompilierung/runtime Classpath muss Groovy frei sein und muss mit Java 1.6
  • Der Test der Kompilierung/runtime Classpath kompatibel sein können alles umfassen ich

mögen Irgendwelche Ideen, welche spezifischen Änderungen ich oben machen muss?

Antwort

2

Wenn Sie Gradle kompilieren möchten beliebig Groovy, sei diese Hauptquelle oder nur Testquelle, werden Sie das groovy Gradle Plugin anwenden wollen. Solange Sie jedoch kein Fat-Jar erstellen (dh eine JAR-Bibliothek, die abhängige Bibliotheken in sich selbst enthält, damit sie als eigenständige Anwendung ausgeführt werden kann), sollten Sie auf dem Laufzeitklassenpfad keine Verbindungen zu Groovy haben. Es ist richtig, dass Sie Spock/Groovy zu Ihren testCompile-Abhängigkeiten hinzufügen möchten. Solange Sie sie auf testCompile beschränken, sollten Sie selbst bei der Erstellung eines fetten JARs diese nicht in Ihren Hauptcompiler-Klassenpfad aufnehmen. oder muss zur Laufzeit auf dem Klassenpfad stehen.

In Gradle haben Sie auch Zugriff auf die Konfigurationen aller Abhängigkeiten zu ändern. Werfen Sie einen Blick auf die Gradle Dependency Management Dokumente für weitere Informationen dazu.

+0

Danke @alexanerific (+1) - bitte sehen Sie meine bearbeitete 'build.gradle' - sieht das jetzt richtig aus? Danke noch einmal! – smeeb

+0

Sieht ziemlich gut zu mir aus. Die einzige Sache, auf die Sie achten sollten, ist die Verwendung von Groovy 2.3+. http://groovy-lang.org/download.html#requirements beschreibt Situationen, in denen die Verwendung einer Version von groovy höher als 2.3 Java 1.7 Minimum erfordern könnte. Dies hat keine Auswirkungen auf Ihre Laufzeitanforderungen von Java1.6, könnte jedoch die Kompatibilität Ihres Quellcodes zur Build-Zeit beeinträchtigen. Wenn Sie nur Groovy für Spock verwenden, sollten Sie Groovy 2.2 und Spock 1.0-groovy-2.0 verwenden können. Denkanstoß. Wenn all das mit dir gelenkt wird, denkst du, dass du meine Antwort akzeptierst? Vielen Dank, viel Spaß beim Testen. – alexanderific