2009-06-18 14 views
8

हम 2010 के अंत तक Java2SE v1.4 के साथ फंस गए हैं। यह वास्तव में बुरा है, लेकिन हम इसकी मदद नहीं कर सकते हैं। हमें पहले से ही कुछ नई सुविधाओं का उपयोग करने के लिए क्या विकल्प हैं? मैंजावा 1.4 में बैकपोर्ट जावा 5/6 विशेषताएं?

  • बाइटकोड को बदलने जैसे कई तरीकों के बारे में सोच सकता हूं, उदा। Retrotranslator या Retroweaver का उपयोग कर।

  • पुस्तकालयों का बैकपोर्ट, उदा। Concurrent Backport, लेकिन यह जेनेरिक के लिए मदद नहीं करता है।

  • जावा 5 सुविधाओं का अनुकरण, उदा। चेक संग्रह, सहायक विधियों के साथ Varargs, आदि

  • प्रीकंपिलेशन द्वारा स्रोत कोड बदलना, अंतिम संकलन से पहले सभी 1.5 सामान अलग करना, उदा। Declawer का उपयोग कर यह कर सकते हैं।

मैं वेबलॉगिक और "असली" सामग्री का उपयोग करके उत्पादन वातावरण में इसके साथ बहुत सकारात्मक अनुभव में रूचि रखता हूं।

+3

वास्तव में picky होने के लिए ... जावा 4 कभी नहीं था, यह जावा 2 रिलीज 1.4 था। –

+3

हाँ क्योंकि सूर्य के विपणन नाम तार्किक हैं। –

+0

टैग संपादित करने के लिए धन्यवाद। मैंने एसओ की खोज की लेकिन संबंधित प्रश्न नहीं मिला: - http://stackoverflow.com/questions/603828/java-5-to-java-1-4-source-code-backporting-tool - http: // stackoverflow.com/questions/547872/converting-java-1-5- स्रोत-into-1-1- स्रोत - http://stackoverflow.com/questions/17993/easy-way-to-backport-java-6 -code-to-java-5 –

उत्तर

11

धन्यवाद। यहां सभी प्रासंगिक उत्तरों और मेरे स्वयं के शोध का सारांश दिया गया है। Retros
यह "retro"-tools द्वारा किया जाता है:

बाईटकोड बदलने Retrotranslator, Retroweaver और JBossRetro। Retrotranslator सबसे परिपक्व और उनके उपकरण के सक्रिय प्रतीत होता है। ये उपकरण सभी कक्षाओं को स्कैन करते हैं और जावा 5 और 6 सुविधाओं को हटाने के लिए बाइटकोड को बदलते हैं। तृतीय पक्ष बैकपोर्ट पुस्तकालयों का उपयोग करके कई जावा 5 फीचर्स समर्थित हैं, कुछ । यह विकल्प सबसे लोकप्रिय है और उपयोगकर्ताओं से कुछ सकारात्मक प्रतिक्रिया है। प्रयोगों से पता चला है कि यह के रूप में काम कर रहा है। developerworks पर एक संक्षिप्त अवलोकन देखें।

प्रो: आप पूरी तरह से जावा 5 में विकसित कर सकते हैं, मॉड्यूल और सभी प्रकार के जेएआर बना सकते हैं। अंत में आप सभी वर्गों को जावा 1.4 में बदल दें और अपना ईएआर पैकेज करें। यह आसानी से रेट्रोट्रांसलेटर के मेवेन एकीकरण (org.codehaus.mojo:retrotranslator-maven-plugin) के साथ किया जाता है।

कॉन: कंज़र्वेटिव वातावरण बाइटकोड को तैनात करने की अनुमति नहीं देता है। रेट्रो-चरण का परिणाम किसी भी कोडर को दिखाई नहीं देता है और इसे अनुमोदित नहीं किया जा सकता है। दूसरी समस्या डर है: कुछ गुप्त उत्पादन समस्या हो सकती है और रेट्रो-कोड एक और कदम है जिसे इसके लिए दोषी ठहराया जा सकता है। ऐप-सर्वर विक्रेताओं बदले बाइटकोड के कारण मदद से इनकार कर सकते हैं। इसलिए कोई भी उत्पादन में इसका इस्तेमाल करने की ज़िम्मेदारी नहीं लेना चाहता। चूंकि यह तकनीकी समस्या की तुलना में एक पुलिसगत है, इसलिए मुझे कोई समाधान नहीं दिख रहा है। यह हमारे लिए हुआ है, तो मैं जावा 1.4 :-(

संकलन Java5 आगे के विकल्प की तलाश में गया था:। Jsr14
वहाँ एक असमर्थित विकल्प, javac -source 1.5 and -target jsr14 जो वैध जावा 1.4 बाईटकोड को Java5 स्रोत संकलित है अधिकांश varargs जैसी सुविधाओं या पाश के लिए बढ़ा दिया वैसे भी संकलक द्वारा अनुवाद किया जाता है। जेनेरिक्स और एनोटेशन हटा दिए जाते हैं। Enums समर्थित नहीं हैं और मैं autoboxing के बारे में पता नहीं है, के रूप में valueOf तरीकों ज्यादातर Java5 में पेश किए गए।

कोन : केवल बाइट कोड का अनुवाद किया जाता है, लाइब्रेरी उपयोग नहीं बदला जाता है। इसलिए आपको सावधान रहना होगा जावा 5 विशिष्ट एपीआई का उपयोग करने के लिए टी (लेकिन बैकपोर्ट का उपयोग कर सकते हैं)। आगे आपको एक ही समय में सभी मॉड्यूल बनाना होगा, क्योंकि विकास के समय के लिए आप जेनेरिक और एनोटेशन जानकारी के साथ जावा 5 कोड चाहते हैं। तो आपको जावा 1.4 उत्पादन के लिए पूरी परियोजना को स्क्रैच से बनाना होगा।

बदलने वापस जावा 1.4 स्रोत: Declawer
एक related question में दिए हैं, वहाँ Declawer, एक संकलक विस्तार, कि जेनरिक के लिए काम करता है और varargs, लेकिन नहीं पाश या autoboxing के लिए बढ़ाया है। उत्पन्न स्रोत "थोड़ा फंकी है, लेकिन बहुत बुरा नहीं है"।

प्रो: जेनरेट किया गया स्रोत उपलब्ध है और इसकी समीक्षा की जा सकती है। इस स्रोत में सबसे खराब मामले में फिक्स किया जा सकता है। कोई "जादू" नहीं है, क्योंकि स्रोत मान्य जावा है। जावा 1.4 स्रोत फिर से प्राप्त करने के लिए कुछ लोग जेएडी (जावा डिकंपेलर) का भी उपयोग करते हैं। यदि आप डीबग जानकारी डीबग के साथ संकलित करते हैं और आंतरिक कक्षाओं का उपयोग नहीं करते हैं तो जेड पठनीय के आउटपुट को पढ़ने योग्य है।

कॉन: -target jsr14 के समान, आपको तैनाती में एक अतिरिक्त कदम की आवश्यकता है। पुस्तकालयों के साथ भी वही समस्याएं।

स्रोत बदलने वापस जावा 1.4 करने के लिए: हाथ से
कई जवाब हाथ से यह कर का सुझाव दिया। एक स्वचालित, दोहराने वाली निर्माण प्रक्रिया के लिए यह निश्चित रूप से उपयोगी नहीं है, लेकिन एक बार के लिए यह उचित है। बस क्या संभव है स्वचालित करें। शायद घर से उगाए गए रूपांतरण उपकरण बनाने के लिए एंट्लर को देखें।

बैकपोर्टेड पुस्तकालय:
समस्या है, कि Java5 भी जहाजों नई पुस्तकालयों, कि पुराने JREs में उपलब्ध नहीं हैं, related question देखते हैं। सौभाग्य से कई बैकपोर्टेड लाइब्रेरीज़ हैं जो आपको जावा 5 की कुछ कार्यक्षमता देते हैं, लेकिन जेनरिक जैसी भाषा सुविधाओं को अनुकरण नहीं कर सकते हैं।

  • Annotations, (जावा 6 5 के लिए)
  • Gif writing (जावा 6 5 के लिए)
  • अपनी खुद की backport परियोजना ;-)
  • शुरू TSS
  • Concurrent
  • com.sun.net.httpserver में चर्चा की आप जेडीके या अन्य पुस्तकालयों से आपको आवश्यक कक्षाओं की प्रतिलिपि बना सकते हैं, लेकिन अधिकतर वे अन्य वर्गों से संबंधित हैं।

नकल Java5 जावा 1.4 कोड में विशेषताएं:
मैं कुछ चीजें आप अपने जीवन को आसान और अभी भी जावा 1.4 के साथ रहने बनाने के लिए कर सकता है के बारे में सोच रहा था। सबसे महत्वपूर्ण सुविधाओं typesafe संग्रह, यहाँ कुछ विचार कर रहे हैं:

    इसके बजाय जेनरिक का उपयोग कर आप कुछ टेम्पलेट के साथ अपने स्वयं typesafe कंटेनर बना सकते हैं की
  • एक टाइपएफ़ इटरेटर जोड़ें (जो अब कोई इटरेटर नहीं है)।
  • asList विधियां जोड़ें जो 1,2,...,n तर्क और उनमें से एक सरणी (varargs अनुकरण करने के लिए) की अनुमति देता है।
  • varargs के लिए तरीके (1,...,n arrays के लिए तर्क) और valueOf कुछ सहायक वर्ग में रखा जा सकता है।
+0

जावा के लिए स्क्रैच से पूरी परियोजना को संकलित करना 1.4 उत्पादन को आपके बिल्ड सर्वर द्वारा संभाला जाना चाहिए। –

+0

इनमें से अधिकतर अब पुराने हैं। क्या 6-> 5 के बराबर है? – nick

+0

रेट्रोट्रांसलेटर को 6-> 5 करने में सक्षम होना चाहिए। मैंने इसे HSqlDB 2 के साथ करने की कोशिश की। दुर्भाग्य से यह नए java.sql वर्गों को संभाल नहीं करता है, इसलिए यह असफल रहा। लेकिन अगर आप किसी भी जावा 6 एपीआई का उपयोग नहीं करते हैं, तो इसे आज़माएं। –

2

sourcecode precompilation, अंतिम संकलन और तैनाती से पहले अलग करना सभी 1.5 सामान। क्या कोई उपकरण है जो यह कर सकता है?

हां। उन्हें रेट्रोट्रांसलेटर या रेट्रोवेवर कहा जाता है। जेनरिक के अलावा (जो कि संकलक के लिए वैसे भी मौजूद है), आप बस "1.5 सामान पट्टी" नहीं कर सकते हैं। Enums (और शायद कुछ अन्य विशेषताओं) को कार्यात्मक रूप से समकक्ष कोड के साथ प्रतिस्थापित किया जाना है। यह वही है जो वे उपकरण करते हैं।

+0

रेट्रोट्रांसलेटर या रेट्रोइवर ऊपर सूचीबद्ध अनुसार बाइटकोड बदलता है । मैं सहमत हूं, सभी सुविधाओं का उपयोग करने में सक्षम नहीं होगा। जेनिक्स पहले से ही एक बड़ी जीत होगी। –

2

आप जेडीके 1.5 सुविधाओं के साथ कोड कर सकते हैं और संकलन समय पर जेडीके 1.4 को लक्षित कर सकते हैं। उपलब्ध जावैक विकल्प देखें। हालांकि, अधिकांश पुस्तकालय अब जेडीके 1.5 कोड का उपयोग कर रहे हैं, इसलिए आप पुराने libs के साथ अटक जाएगा।

+0

मुझे गलत हो सकता है, लेकिन पुराने स्रोत स्तर को लक्षित करना (इस मामले में 1.4) आपको केवल उस स्रोत स्तर की विशेषताओं का उपयोग करने के लिए प्रतिबंधित करता है। अगर मैं गलत हूं कृपया मुझे सही। शायद हम अलग-अलग सेटिंग्स का जिक्र कर रहे हैं, क्या आप अपने उत्तर में अधिक जानकारी जोड़ सकते हैं? –

+0

मुझे भी इतना बताया गया था, लेकिन मैं इसे काम करने में सक्षम नहीं हूं। आम तौर पर स्रोत = 1.5 ग्रहण में लक्ष्य = 1.5 और कमांड लाइन में सादे सूर्य के जाव के लिए आवश्यक है। –

+0

आप ध्वज-लक्ष्य का उपयोग कर सकते हैं jsr14 –

0

यह ध्यान देने योग्य है कि जावा 1.4 कुछ समय के लिए ईओएल रहा है। जावा 5.0 ईओएल 8 अक्टूबर, 200 9 होगा। अगर कोई आपको 2010 तक जावा 5.0 का वादा कर रहा है, तो मैं पूछूंगा क्यों ?!

+0

जहां मैं काम करता हूं, हम अभी भी 1.4 के साथ अटक गए हैं, हालांकि वादा इस साल स्विच करना है। बड़ी कंपनियां तकनीकी कंपनियों की कल्पना में ईओएल तिथियों का सपना देखने वाले लोगों की तुलना में कामकाजी प्रणालियों को बदलने के लिए अधिक रूढ़िवादी और अनिच्छुक हैं। या शायद उन लोगों को पता है कि कंपनियां विस्तारित समर्थन अनुबंधों के लिए भी अच्छे पैसे का भुगतान करने को तैयार हैं। –

+0

-1 क्योंकि यह मेरी मदद नहीं करता है। मुझे पता है कि हमें अपग्रेड करना चाहिए और मैं प्रबंधन के लिए ऐसा कहने वाला पहला व्यक्ति हूं। –

+1

मैंने 65 के कर्मचारियों के साथ एक कंपनी के लिए काम किया और अब 13 9 के कर्मचारियों के साथ एक के लिए काम किया है और वे केवल सभी पीसी पर जावा 6 में अपग्रेड कर रहे हैं, इसलिए मुझे पता है कि यह धीमा हो सकता है, लेकिन जावा 5.0 5 साल के लिए उपलब्ध है, और जावा 6 2.5 साल जावा 7 2010 तक उपलब्ध होने की संभावना है। मुझे नहीं लगता कि एक बड़ी कंपनी के लिए काम करना एक अच्छा बहाना है। यदि आपके पास जावा के समर्थित/वर्तमान संस्करण का उपयोग करने के लिए एक व्यावसायिक मामला है तो आपको एक बनाना चाहिए। –

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