2015-08-21 6 views
5

मेरा जावा 7 प्रोजेक्ट ग्रैडल में ठीक से निर्माण कर रहा है, भले ही यह java.util.Optional पर निर्भर करता है।जावा 1.7 में वैकल्पिक? स्रोत/लक्ष्य संगतता को अनदेखा करना?

मैं बहुत उलझन में हूं। java.util.Optional जावा 8 में केवल एक चीज थी, है ना?

मेरे पास एक ग्रैडल प्रोजेक्ट है, और मैंने sourceCompatibility और targetCompatibility से 1.7 दोनों सेट किए हैं।

इस मॉड्यूल में एक वर्ग में मैं आयात java.util.Optional, जो मैं सोचा जावा 8.

अगर मैं gradlew clean assemble चलाने जब तक शामिल नहीं किया गया, संकलक भी सही विकल्प के साथ कहा जाता हो जाता है। एक चेतावनी है कि हालांकि थोड़ा सा फिश लगता है। हालांकि, जार बस ठीक हो गया है।

15:51:12.998 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':core:compileJava'. 
15:51:13.000 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 1.7 -target 1.7 -d /Users/deejay/workspace/number-jumble/core/build/classes/main -g -encoding UTF-8 -classpath /Users/deejay/workspace/number-jumble/model/build/libs/model-1.0.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx/1.3.1/18995f8b7b19118975722370818023c76a86fdf4/gdx-1.3.1.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.badlogicgames.gdx/gdx-freetype/1.3.1/1f647429753c8c91fb8fc477ffe5a4c9cde2f429/gdx-freetype-1.3.1.jar:/Users/deejay/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/18.0/cce0823396aa693798f8882e64213b1772032b09/guava-18.0.jar /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/NumberJumbleGame.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/complexity/ChangeComplexityScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/libgdx/SizeToAndLayoutAction.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/libgdx/TimeLabel.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/services/AppropriatelySizedFontService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/services/DateService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/GameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/HardcodedStreakAssessmentService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/LandscapeGameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/PortraitGameSessionUi.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/RackScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/RackSummaryScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/session/StreakAssessmentService.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/splash/ReturnSplashScreen.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/GdxLocalStatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/MapBackedStatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/StatisticsRepository.java /Users/deejay/workspace/number-jumble/core/src/main/java/com/binarytweed/numberjumble/stats/StatisticsService.java 
15:51:13.001 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler] Compiling with JDK Java compiler API. 
15:51:13.007 [ERROR] [system.err] warning: [options] bootstrap class path not set in conjunction with -source 1.7 
15:51:13.185 [ERROR] [system.err] 1 warning 

क्या मैं पागल हो रहा हूं?

+0

"[ERROR] [system.err] चेतावनी: [विकल्प] बूटस्ट्रैप क्लास पथ -सोर्स 1.7 के साथ संयोजन में सेट नहीं है" इसका मतलब है कि कंपाइलर जावा 7 सिंटैक्स को लागू करेगा लेकिन यह गारंटी नहीं दे सकता कि आप केवल कक्षाओं में उपलब्ध हैं जावा 7. –

+0

धन्यवाद ओलेग - क्या वह "गारंटी दे सकता है" होने के लिए "गारंटी दे सकता है"? –

+0

[ग्रैडल संकलन जावा कार्य चेतावनी: \ [विकल्प \] बूटस्ट्रैप क्लास पथ के संभावित डुप्लिकेट -सोर्स 1.6 के साथ संयोजन में सेट नहीं है] (http://stackoverflow.com/questions/16679593/gradle-compilejava-task-warning- विकल्प- बूटस्ट्रैप-क्लास-पथ-सेट-इन-कॉन्जू), [चेतावनी: [विकल्प] बूटस्ट्रैप क्लास पथ -सोर्स 1.5 के साथ संयोजन में सेट नहीं है] (https://stackoverflow.com/questions/7816423/warning- विकल्प -बूटस्ट्रैप-क्लास-पथ-नहीं-सेट-इन-संयोजन-स्रोत-1-5? rq = 1) –

उत्तर

4

तुम पागल हो नहीं जा रहे हैं: डी

java.util.Optional जावा 8. में पेश किया गया था कि सही है। और मुझे लगता है कि आप जावा 8 के खिलाफ संकलन कर रहे हैं। इसलिए कक्षाओं (और चेक) का उपयोग वास्तव में जावा 8 के हैं।

sourceCompatibility केवल सिंटैक्स शैलियों का उपयोग करता है। कक्षाओं का इस्तेमाल नहीं किया जाता है। इस सेट के साथ 1.7 आप उदाहरण के लिए लैम्ब्डा एक्सप्रेशन का उपयोग नहीं कर सकते हैं। लेकिन आप जावा 8 के वर्गों का उपयोग कर सकते हैं। यदि आप नए जावा के वर्गों का उपयोग करते हैं, तो आपका एप्लिकेशन रनटाइम पर असफल हो जाएगा।

targetCompatibility केवल संकलित भाषा स्तर को प्रभावित करता है। तो जावा बाइनरी कक्षा कोड का संस्करण। फिर, संकलन के दौरान जावा कक्षाओं तक पहुंच संभव है, लेकिन अगर जावा के पुराने संस्करण के साथ इसे निष्पादित किया जाता है तो यह असफल हो जाएगा, क्योंकि संदर्भित वर्ग मौजूद नहीं है।

+0

ब्लिमी - जावा डेवलपर के रूप में दस साल और मुझे कभी एहसास नहीं हुआ कि यह कैसे काम करता है! –

+2

@ डीजय, आने वाले [जेईपी -247] (http://openjdk.java.net/jeps/247) का उल्लेख करने लायक है (यदि कार्यान्वित किया गया है) संगतता संकलन को और अधिक मजबूत बना देगा। यह वास्तव में जांच करेगा कि दिए गए वर्ग या विधि चयनित जावा संस्करण में मौजूद है या नहीं! –

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