2011-04-08 11 views
10

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

तो, मेरे प्रोग्राम को जावा कक्षाओं को संकलित करने के लिए सक्षम करने का सबसे अच्छा तरीका क्या है, जबकि अंतिम उपयोगकर्ता को अपनी मशीनों पर जेआरई स्थापित करने की आवश्यकता होती है? यदि यह संभव नहीं है, तो उपयोगकर्ता मशीन पर स्थापित करने के लिए पुस्तकालयों/जार फ़ाइलों का न्यूनतम सेट क्या होगा?

मुझे लगता है कि वेब पर ऐप लॉन्च करने के लिए जेडब्ल्यूएस (जावा) का उपयोग करने की एक और संभावना हो सकती है। इस मामले में, क्या मेरे सॉफ़्टवेयर के लिए जेडीके (मुख्य रूप से tools.jar मुझे लगता है) की आवश्यकता नहीं है? क्या मुझे किसी भी तरह से अपने सॉफ्टवेयर के साथ tools.jar बंडल करना होगा?

उत्तर

5

आप स्टैंडअलोन Java compiler from Eclipse का उपयोग कर सकते हैं। इसे जेडीके स्थापित करने की आवश्यकता नहीं है, और यह एक एकल जेएआर फ़ाइल है जिसे आप अपने प्रोजेक्ट में उपयोग कर सकते हैं। यह संकलक है जिसे ग्रहण के अंदर ही प्रयोग किया जाता है, लेकिन इसे अन्य कार्यक्रमों में भी एकीकृत किया जा सकता है। आप http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php पर वर्तमान नवीनतम स्थिर संस्करण पा सकते हैं, जेडीटी कोर बैच कंपाइलर की तलाश करें। प्रलेखन http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm

पर भी उपलब्ध है आप Janino का भी उपयोग कर सकते हैं, जो पूर्ण जावा कक्षाओं से भी छोटी इकाइयों को संकलित कर सकता है: ब्लॉक, अभिव्यक्तियां। यह पूर्ण संकलक नहीं है, हालांकि, यह आपके द्वारा उपयोग किए जाने वाले जावा भाषा की सभी विशेषताओं का समर्थन नहीं करता है (जेनिक्स, एनोटेशन, एनम्स, ...)

+1

जावा -jar ecj-3.6.2.jar -d gaevfs.bin \ gaevfs.src \ com \ newatlanta \ commons \ vfs \ प्रदाता \ gae \ GaeFileObject.java -cp डी: \ ProgXP \ jre6 \ lib \ rt .jar; D: \ कार्यक्षेत्र \ diyism.com.war \ वेब-INF \ lib \ appengine-api-1.0-sdk-1.5.5.jar; D: \ कार्यक्षेत्र \ diyism.com.war \ वेब-INF \ lib \ कॉमन्स-वीएफएस-2.0-SNAPSHOT.jar; D: \ कार्यक्षेत्र \ diyism.com.war \ वेब-INF \ lib \ gaevfs-0.3.jar; D: \ कार्यक्षेत्र \ diyism.com.war \ वेब-INF \ lib \ commons-logging-1.1.1.jar – diyism

1

शायद http://asm.ow2.org/ यह उपयोगी होगा? फ्लाई पर बाइटकोड उत्पन्न करने के लिए?

0

ऐसा लगता है कि एक बेहतर समाधान कुछ स्क्रिप्टिंग भाषा का उपयोग करना होगा जो संकलित किए बिना JVM के भीतर चलाया जा सकता है।

संभवतः Java Scripting API आपके लिए उपयोग किया जाएगा। मुझे यकीन है कि अन्य विकल्प भी हैं।

3

जावा कंपाइलर का उपयोग करने के लिए, आपको अपने आवेदन में tools.jar शामिल करना होगा (उदाहरण के लिए इसे क्लासलोडर द्वारा पहुंचा जा सकता है जो संकलक लोड करना चाहता है - सिस्टम क्लास लोडर द्वारा सबसे आसानी से)।

+2

".. आपको अपने आवेदन में 'tools.jar' शामिल करने की आवश्यकता है .." [एसएससीसीई टेक्स्ट आधारित कंपाइलर] विकसित करने पर मैं इस संभावना से अधिक ध्यान दे रहा था (http: // pscode .org/STBC /)। जैसा कि मैंने [सहायता में उल्लेख किया है] (http://pscode.org/stbc/help.html#classpath) "..इट शायद सूर्य के वितरण लाइसेंस का उल्लंघन करता है .."। मुझे एहसास है कि यहां लोग 'वकील नहीं हैं', लेकिन अगर किसी के पास लाइसेंस के वैकल्पिक सिद्धांत/व्याख्याएं हैं, तो मुझे उन्हें सुनना अच्छा लगेगा। –

+2

ओपनजेडीके से एक ले लो, और फिर स्रोत के लिए एक लिंक जोड़ें। –

+2

उस बारे में सोचा नहीं था! यह 'लाइसेंस समस्या' की अच्छी तरह से कदम उठाता है। :) –