2012-08-31 12 views
5

में जावा 7 फीचर्स के साथ कोड संकलित करने के लिए jdk7 javac का उपयोग कर सकते हैं। मैं विचार कर रहा था कि जावा परियोजना 2 जार उत्पन्न कर सकती है: एक जावा 7 के लिए और एक जावा 6 के लिए, हाँ, स्रोत कोड कुछ जावा 7 नई सुविधाओं का उपयोग कर सकता है।क्या हम जावा 6 बाइटकोड

तो Java6 जार उत्पन्न करने के लिए, कमांड लाइन की तरह होगा:

javac: target release 1.6 conflicts with default source release 1.7 

this document के अनुसार, यह के लिए संभव हो जाना चाहिए:

javac -target 1.6 -bootclasspath jdk1.6.0\lib\rt.jar -extdirs "" MyApp.java 

दुर्भाग्य से, यह बस एक त्रुटि का उत्सर्जन करता है jdk6 बनाम jdk5, किसी को पता है कि यह jdk7 बनाम jdk6 में क्यों काम नहीं करता है? क्या मैंने कुछ गलत किया है, या यह आधिकारिक तौर पर समर्थित नहीं है?

धन्यवाद।

+2

[जावा 7 के लिए क्रॉस-संकलन दस्तावेज यहां है।] (Http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example) 'ओल्डकोड। जावा स्रोत लक्ष्य स्रोत स्तर पर लिखा जाने की उम्मीद है। आईआईआरसी, जावा 5 और जावा 6 वाक्यविन्यास समान हैं। – McDowell

+0

@McDowell जिसका अर्थ है कि स्रोत कोड में कोई जावा 7 नई विशेषताएं नहीं होनी चाहिए, है ना? –

+0

सही। यदि आप जावा 7 कोड के साथ जावा 6 को लक्षित करना चाहते हैं तो आपको एक विशेषज्ञ तृतीय पक्ष टूल को देखने की आवश्यकता होगी। – McDowell

उत्तर

5

AFAIK, स्रोत और लक्ष्य समान होना चाहिए। जावा 6 के लिए भी। एकमात्र अपवाद है कि स्रोत 1.1 और लक्ष्य 1.0 हो सकता है।

जावा 6 और जावा 7 के लिए नवीनतम जेवीएम के बीच जेवीएम में थोड़ा अंतर है, मेरा सुझाव है कि आप उन्नयन पर विचार करें। नवंबर 2012 में जावा 6 भी अंत (मुफ्त) सेवा होगी, जो अब से तीन महीने ...

+1

सहमत हैं। अपग्रेड या डाउनग्रेड करें। क्रॉस-कंपाइलिंग बहुत दर्द है। – Thilo

+1

@ पीटर लेवरी "नवंबर 2010, जो अब से तीन महीने।" क्या हमने समय पर वापस यात्रा की है? और मैं 2012 में क्यों फंस गया हूँ ?? :) क्षमा करें खुद की मदद नहीं कर सका। – JTMon

+0

@ जेटीएमन बस वापस आ गया! चीन में बिल्कुल इसके अवैध नहीं है। ;) –

2

भले ही यह संभव था, यह आम तौर पर एक बुरा विचार है - यदि आप यह सुनिश्चित करना चाहते हैं कि आपका कोड काम करेगा जावा 6 तो आपको इसे जावा 6 पर बनाना होगा। जावा का प्रत्येक नया संस्करण कक्षा पुस्तकालय में नई कक्षाएं पेश करता है, और मौजूदा वर्गों में नए तरीकों को जोड़ता है, और भले ही आपने अपना जावा 7 कंपाइलर 6-संगत बाइटकोड जेनरेट करने के लिए सेट किया हो उन मामलों को पकड़ें जहां आप 7-एकमात्र विधि कहते हैं।

+0

* "उन मामलों को नहीं पकड़ेगा जहां आप 7-केवल विधि कहते हैं।" * निश्चित रूप से 'bootclasspath' विकल्प का उपयोग करके यह निश्चित रूप से होगा। –

+1

सच है, लेकिन अगर आपके पास जावा 6 इंस्टॉलेशन उपलब्ध है तो आप जावा 7 बूटक्लासपैथ पर अपनी कक्षा लाइब्रेरी डाल सकते हैं, फिर क्यों न केवल इसे सरल रखें और उस जावा 6 का उपयोग करके संकलित करें ... –

+1

* "जावा 6 स्थापना "* स्थापना से आप जेडीके का मतलब है। Bootclasspath पहले से स्थापित ** जेआरई ** या अधिक महत्वपूर्ण रूप से 'rt.jar' के साथ काम कर सकता है, पहले संस्करण के' rt.jar', 'इंस्टॉल' की आवश्यकता नहीं है। यदि आप 1.7, और 1.6 के लिए कोड संकलित कर रहे हैं, साथ ही 1.3 चलाने वाले विरासत उपकरणों के लिए कुछ कोड, यह स्थापित जेडीके ('जावा' के समूह के साथ रन-टाइम जार के समूह के साथ बहुत आसान व्यवहार कर रहा है। घर के मूल्य और ..)। –

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