2015-01-21 14 views
11

In tutti i miei progetti, io uso Gradle e specificare quanto segue:Come imporre una versione del compilatore Java con gradle?

sourceCompatibility = "1.7"; // for example 
targetCompatibility = "1.7"; // defaults to sourceCompatibility 

Ora, ho tre diverse versioni del JDK installato, 1,6-1,8. Per passare da una versione all'altra, i file di shell I source sostituiscono PATH, JAVA_HOME e anche JDK_HOME.

Per errore può capitare che io usi la versione JDK sbagliata e non voglio che ... C'è la possibilità di verificare che la versione del compilatore sia uguale a targetCompatibility prima di tentare qualsiasi attività di compilazione?

+0

Fa questo risposta è stata: http://stackoverflow.com/questions/18487406/gradle-how-to -tell-gradle-to-use-specific-jdk-version-for-building-an-application? – Opal

+0

@Opal no, non proprio; lo scenario dell'OP è diverso dal mio. Non uso una variabile d'ambiente specifica. – fge

+0

ok. Grazie per il chiarimento. – Opal

risposta

9

Uso quanto segue:

task checkJavaVersion << { 
    if (!JavaVersion.current().isJava6()) { 
     String message = "ERROR: Java 1.6 required but " + 
          JavaVersion.current() + 
          " found. Change your JAVA_HOME environment variable."; 
     throw new IllegalStateException(message); 
    } 
} 

compileJava.dependsOn checkJavaVersion 
+0

Hmm, interessante ... Vi capita per caso (altrimenti cercherò) se è possibile utilizzare le istanze di JavaVersion come argomenti per * Compatibilità? – fge

+0

Nessuna idea. –

+0

Risposta: ESSO! Scriverò una risposta ma accetto la tua. Grazie! – fge

13

risposta a sé, e grazie a @JBNizet per fornire la soluzione iniziale ...

La soluzione è infatti di utilizzare JavaVersion, e capita che sia sourceCompatibility e targetCompatibility accettare un JavaVersion come argomento ...

quindi il file di generazione è diventata questa:

def javaVersion = JavaVersion.VERSION_1_7; 
sourceCompatibility = javaVersion; 
targetCompatibility = javaVersion; // defaults to sourceCompatibility 

E allora il compito:

task enforceVersion << { 
    def foundVersion = JavaVersion.current(); 
    if (foundVersion != javaVersion) 
     throw new IllegalStateException("Wrong Java version; required is " 
      + javaVersion + ", but found " + foundVersion); 
} 

compileJava.dependsOn(enforceVersion); 

E funziona:

$ ./gradlew clean compileJava 
:clean UP-TO-DATE 
:enforceVersion FAILED 

FAILURE: Build failed with an exception. 

* Where: 
Build file '/home/fge/src/perso/grappa-tracer-backport/build.gradle' line: 55 

* What went wrong: 
Execution failed for task ':enforceVersion'. 
> Wrong Java version; required is 1.7, but found 1.8 
+0

Grazie per aver condiviso questo! Molto utile .. Nel mio caso tuttavia, ho implementato questo con un check per vedere 'if (foundVersion.isJava7Compatible()) {...}'. Volevo solo condividere perché pensavo che fosse elegante. :) – ZaLiTHkA

Problemi correlati