2011-10-21 16 views
13

मैंने हाल ही में अपनी परियोजनाओं में से एक में जावा 7 में स्थानांतरित कर दिया है। मैं दावा है कि यह कुछ भी नहीं है मुझे लगता है कि इस पर निर्भर जावा 6 या 7 में है बस क्योंकि वहाँ लेकिन जब आज मैं इस पर ध्यान संकलन जावा 1.5 पर चला सकते हैं:जावा 1.5 पर जावा 1.5 के लिए संकलन करेगा 1.7 अभी भी काम करते हैं?

इस चेतावनी पर
bootstrap class path not set in conjunction with -source 1.5 

Google ने पाया है कम जानकारी। क्या इसका मतलब यह है कि आप जावा 1.5 से जावा 1.5 को संकलित नहीं कर सकते हैं?

+0

त्रुटि संदेश के बारे में निश्चित नहीं है, लेकिन मेरे पास यूनिट परीक्षण होंगे जो जावा के प्रत्येक महत्वपूर्ण (1.x) संस्करण के विरुद्ध स्वचालित रूप से चलेंगे जो मैं समर्थन करने का दावा करता हूं। –

उत्तर

13

यह ओरेकल ब्लॉग चेतावनी बताते हैं:

http://blogs.oracle.com/darcy/entry/bootclasspath_older_source

कारण है कि आप तो बड़े मंच के लिए rt.jar स्थापित करने के लिए, असफल हो:

हैं दूसरा कदम नहीं लिया गया है, जावैक नए पुस्तकालयों के साथ पुराने भाषा नियमों का कर्तव्यपूर्वक उपयोग करेगा, जिसके परिणामस्वरूप फाइलें हो सकती हैं जो वें काम नहीं करतीं के संदर्भों के बाद से पुराने प्लेटफार्म गैर-मौजूद तरीकों को शामिल किया जा सकता है।

6
  1. आप बेहतर-संसाधन और लक्ष्य 1.5 सेट कर रहे हैं।

  2. वास्तव में यह सुनिश्चित करने के लिए कि आप गलती से नए वर्गों, विधियों या क्षेत्रों पर निर्भरताओं को शामिल नहीं कर रहे हैं, तो मैवेन-पशु-स्निफर प्लगइन या कुछ ऐसा उपयोग करें।

+2

+1 क्योंकि मैंने कभी मैवेन-पशु-स्निफर के बारे में कभी नहीं सुना है और मेरी इच्छा है कि मैंने कई बार किया। (यूनिवर्सिटी असाइनमेंट टेस्ट वातावरण जो 10 वर्षों में अपडेट नहीं किए गए हैं = argh।) – millimoose

+2

मुझे लगता है कि 'लक्ष्य 1.5' सेट करने की भी सिफारिश की जाती है। मुझे लगता है कि क्लासफ़ाइल प्रारूप संस्करण संख्या 1.5 और 1.6 के बीच बंप हो गई थी, इसलिए 1.5 वीएम उन्हें लोड करने में असमर्थ हो सकता है। (यहां तक ​​कि यदि नहीं, तो माफ की तुलना में बेहतर सुरक्षित।) – millimoose

+0

यदि '-सोर्स' और '-targetarget' निर्दिष्ट हैं, तो 1.7 कंपाइलर '-xbootclasspath' के लिए संकेत देता है - जो बिंदु 2 के लिए खाते हैं। –

12

इसका मतलब यह है कि आप जावा 1.7 से जावा 1.5 संकलन नहीं कर सकते?

नहीं, ऐसा नहीं है। इसका मतलब है कि ऐसा करने का एक सही तरीका और गलत तरीका है ... और आप इसे गलत तरीके से कर रहे हैं।

सही तरीके से एक जावा 1.7 JDK पर जावा 1.5 के लिए संकलित करने के लिए है:

जावा 1.5 से "rt.jar" की एक प्रति की
  • प्राप्त पकड़ और संकलन bootclasspath पर डाल दिया।

  • -सोर्स 1.5 और लक्ष्य 1.5 के साथ संकलित करें।

चेतावनी संदेश आपको बता रहा है कि आपने इनमें से पहला नहीं किया है।


तरीका है कि आप अभी निर्माण कर रहे हैं परोक्ष जावा रनटाइम एपीआई के लिए "rt.jar" के 1.7 संस्करण का उपयोग कर रहा है। यह काम कर सकता है! (दरअसल, यह कार्य करना चाहिए कि आपने कोड पर कोई बदलाव नहीं किया है क्योंकि यह 1.5 पर बनाया गया था।) हालांकि, जोखिम है कि आप जावा 1.6 या 1.7 में जोड़े गए वर्गों या विधियों पर आकस्मिक रूप से निर्भरताएं पेश कर सकते हैं। जब आप Java 1.5 पर अपना एप्लिकेशन चलाने का प्रयास करते हैं तो इसके परिणामस्वरूप रनटाइम त्रुटियां होती हैं।

2

- स्रोत 1.5 सुनिश्चित करेगा कि स्रोत फ़ाइलें जावा 5 सम्मेलनों का अनुपालन करती हैं। - लक्ष्य 1.5 सुनिश्चित करेगा कि उत्पन्न कक्षा फाइल जावा 5 सम्मेलनों का अनुपालन करती है।इनमें से कोई भी आपको जावा 6 या 7 लाइब्रेरी विधियों का उपयोग करने से बचाएगा। आपको या तो रूट rass.jar का उपयोग करके --bootclasspath का उपयोग करके संकलित करना होगा, या जानवर-स्निफर-प्लगइन जैसे कुछ उपयोग करें (यदि आप मेवेन का उपयोग कर रहे हैं) जो सब कुछ प्रकार के हस्ताक्षर का निरीक्षण करेगा, और प्रकाशित प्रोफाइल के साथ तुलना करेगा।

पशु-स्निफर-प्लगइन के साथ

, आप एक इलाज के लिए में हो सकता है, क्योंकि आप जो अपने निर्माण की प्रक्रिया का कारण हो सकता है कि जावा 6 API का उपयोग 3 पार्टी पुस्तकालयों, आप जावा 5.

pursing रहे हैं को देखते हुए विफल करने के लिए टक्कर कर सकते हैं
संबंधित मुद्दे