2015-01-21 6 views
11

अपनी परियोजनाओं के सभी में, मैं Gradle का उपयोग करें और निम्न निर्दिष्ट करें:ग्रेडल के साथ जावा कंपाइलर संस्करण को कैसे लागू करें?

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

अब, मैं JDK के तीन विभिन्न संस्करण स्थापित हैं, 1.6 से 1.8 करने के लिए है। एक संस्करण से दूसरे संस्करण में स्विच करने के लिए, खोल फ़ाइलों को PATH, JAVA_HOME और JDK_HOME बदलने के लिए।

दुर्घटना से ऐसा हो सकता है कि मैं गलत जेडीके संस्करण का उपयोग करता हूं और मुझे यह नहीं चाहिए ... क्या यह जांचने की संभावना है कि संकलक संस्करण लक्ष्य के बराबर है किसी भी संकलन कार्य को करने से पहले कॉम्पैबिलिटी?

+0

इस उत्तर मदद करता है आप: http://stackoverflow.com/questions/18487406/gradle-how-to -टेल-ग्रेड-टू-यूज-एडी-जेडीके-वर्जन-फॉर-बिल्डिंग-ए-एप्लाका? – Opal

+0

@ ओपल संख्या, वास्तव में नहीं; ओपी का परिदृश्य मेरा से अलग है। मैं एक विशिष्ट पर्यावरण चर का उपयोग नहीं करता हूं। – fge

+0

ठीक है। स्पष्टीकरण के लिए धन्यवाद। – Opal

उत्तर

9

मैं निम्नलिखित का उपयोग करें:

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

हम्म, दिलचस्प ... क्या आपको किसी भी मौके से पता चल जाता है (अन्यथा मैं इसे खोजूंगा) क्या जावावर्सन उदाहरणों का उपयोग * संगतता के तर्क के रूप में करना संभव है? – fge

+0

बिल्कुल कोई विचार नहीं। –

+0

उत्तर: यह करता है! मैं एक उत्तर लिखूंगा लेकिन आपका स्वीकार करूंगा। धन्यवाद! – fge

13

उत्तर आत्म करने के लिए, और प्रारंभिक समाधान प्रदान करने के लिए @JBNizet करने के लिए धन्यवाद ...

समाधान JavaVersion उपयोग करने के लिए वास्तव में है, और यह है कि दोनों sourceCompatibility होता है और targetCompatibility एक JavaVersion एक तर्क के रूप में स्वीकार ...

इसलिए निर्माण फ़ाइल इस बन गया है:

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

और फिर काम:

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

compileJava.dependsOn(enforceVersion); 

और यह काम करता है:

$ ./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

इसे साझा करने के लिए धन्यवाद! बहुत मददगार .. हालांकि मेरे मामले में, मैंने इसे देखने के लिए एक चेक के साथ कार्यान्वित किया 'if (foundVersion.isJava7 संगत()) {...} '। बस साझा करना चाहता था क्योंकि मैंने सोचा था कि यह निफ्टी था। :) – ZaLiTHkA

संबंधित मुद्दे