2010-08-21 15 views
6

पर जावा कंपाइलर मेरे वर्तमान प्रोजेक्ट में, मुझे रनटाइम पर जावा कोड संकलित करने की आवश्यकता है (पृष्ठभूमि में उपयोगकर्ता से इनपुट संसाधित करने के लिए)। यह classpath में tools.jar के साथ ठीक काम करता है। हालांकि, मेरे कार्यक्रम के सभी उपयोगकर्ताओं को अपने सिस्टम पर जेडीके स्थापित नहीं है। उनमें से कुछ में केवल जेआरई है और उस स्थिति में रनटाइम पर कोई जावा कंपाइलर उपलब्ध नहीं है। मैं अपने उपकरण के एक हिस्से के रूप में सूर्य से tools.jar सहित उस समस्या को हल कर सकता हूं।रनटाइम

लेकिन tools.jar बहुत बड़ा (> 12 एमबी) है। समस्या यह है कि मुझे बड़ी जार फ़ाइल शामिल करनी है, हालांकि मुझे इस जार द्वारा प्रदान की गई कार्यक्षमता के केवल एक छोटे से हिस्से में रुचि है।

  1. यह tools.jar फ़ाइल को तोड़ने के लिए संभव है, ताकि मैं वर्गों है कि जावा कोड केवल संकलन के लिए आवश्यक हैं के छोटे सबसेट है?

  2. क्या यह अवैध है?

बहुत बहुत धन्यवाद।

उत्तर

3

ईक्लाइज़ कंपाइलर केवल 1.6 एमबी है और ग्रहण के बिना काम करना चाहिए। आप इसे here डाउनलोड कर सकते हैं। ऐसा लगता है कि यह JavaCompiler एपीआई लागू करता है।

यह ग्रहण सार्वजनिक लाइसेंस के तहत लाइसेंस प्राप्त है, इसलिए इसे अपने स्वयं के अनुप्रयोग में शामिल करने में कोई समस्या नहीं होनी चाहिए।

+0

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

0

मुझे नहीं लगता कि टूल.जर को तोड़ना संभव होगा, और टूल.जर को शामिल करना भी कानूनी नहीं होना चाहिए।

चेक http://forums.sun.com/thread.jspa?threadID=5161541

आप कुछ 3 पार्टी जावा संकलक के लिए देखो और एक ही उपयोग करने के लिए अपने कोड बदल सकता है।

  • GCJ, जीसीसी का एक हिस्सा है जो जावा के अलावा सी, फोरट्रान, पास्कल और अन्य प्रोग्रामिंग भाषाओं संकलित करता है। यह जीसीसी के बैक-एंड का उपयोग करके देशी कोड उत्पन्न कर सकता है। http://en.wikipedia.org/wiki/GNU_Compiler_for_Java

  • ECJ, जावा के लिए ग्रहण संकलक, एक खुला स्रोत वृद्धिशील ग्रहण जेडीटी द्वारा प्रयोग किया जाता संकलक है।

  • http://en.wikipedia.org/wiki/Jikes

(यह एक Java5 के लिए जावा 6 और सीमित समर्थन का समर्थन नहीं करता) लेकिन मैं इन का उपयोग कर संकलन के लिए सटीक कोड पता नहीं है।

+1

जीसीजे बेकार है। जैक्स वादा कर रहा है लेकिन कई जावा 5 सुविधाओं का समर्थन नहीं करता है, जो हम में से अधिकांश – TheLQ

0

क्या आप बीनशेल जैसे जावा-स्क्रिप्टिंग जैसे कुछ चाहते हैं? यह उन्हें संकलित किए बिना जावा कोड चलाने में मदद करता है।

1

रनटाइम पर कोड संकलित करने के बजाय, मैं कोड को एक स्क्रिप्टिंग भाषा में फिर से लिखूंगा और scripting framework का उपयोग करूंगा। जेडीके के लिए कोई ज़रूरत नहीं है और आसपास जाने के लिए कोई कानूनी समस्या नहीं है। फिर आपके पास Beanshell, JavaScript, या jython जैसे भाषाओं का उपयोग करने के लिए कई विकल्प हैं।

+0

मैंने स्वयं निर्मित राइनो प्रत्यारोपण का उपयोग किया है, और यह बहुत अच्छा काम करता है। इसमें कुछ अंतर्निहित कार्यों का बोनस भी है जो इसे कभी राइनो में नहीं बनाते हैं, साथ ही पूरी प्रक्रिया को सरल बनाते हैं। – TheLQ

+0

कोई भी JRuby? :) –

0

आप जावासिस्ट लाइब्रेरी को देखना चाहते हैं जिसमें एक स्निपेट कंपाइलर है जो गणना करने के लिए एक विधि बनाने के लिए उपयुक्त है और फिर उस विधि का उपयोग कर रहा है।

कौन सा सबसे उपयुक्त है आपकी वास्तविक आवश्यकताओं पर निर्भर करता है - विशेष रूप से आपको इसे कितनी बार करने की आवश्यकता होती है।

1

शायद एक बेहतर सवाल यह है कि क्यों?

यदि आपको गतिशील गणित की गणना करने की आवश्यकता है, तो JEval पर विचार करें। यदि आपको लोगों को सरल प्लगइन लिखने की आवश्यकता है, तो जावास्क्रिप्ट या पायथन जैसे कुछ गतिशील भाषाओं पर विचार करें जिन्हें @Jay ने उल्लेख किया है।

किसी और चीज के लिए, आपको यह आवश्यक होना चाहिए कि आपका उपयोगकर्ता जेडीके डाउनलोड करें, क्योंकि जावा को लिखने की आवश्यकता है। एक अच्छा कारण खोजना मुश्किल होगा कि आप अपने प्रोग्राम में एक कंपाइलर को एम्बेड करना क्यों चाहते हैं