2012-11-10 17 views
5

"अच्छा" जावा कोड जनरेशन libs क्या हैं? मुझे जैक्समे में एक पीढ़ी का हिस्सा मिला, लेकिन यह गरीब और पुराना है। मुझे जावा कोड के माध्यम से जावा कोड उत्पन्न करना पसंद है। तो मूल रूप से यह कहने के लिए एक lib का उपयोग करें कि उसे एक्स फ़ील्ड, वाई विधियों, आदि के साथ एक निश्चित कंक्रीट क्लास या इंटरफ़ेस उत्पन्न करना है .. जो तब फ़ाइल सिस्टम पर लिखे गए हैं .. मुझे पता है कि ढांचे का उपयोग करते हैं, लेकिन नहीं कर सकते एक स्टैंडअलोन lib खोजें .. - एडजावा कोड जनरेशन लाइब्रेरी की खोज

+1

यदि आपका प्रोग्राम उस वर्ग का नाम जानता है जो वह उत्पन्न करना चाहता है, और सभी सदस्यों का नाम और सामग्री, पृथ्वी पर आपको कोड जनरेटर की आवश्यकता क्यों है? आउटपुट स्ट्रीम में प्रिंट स्टेटमेंट पर्याप्त नहीं होगा? दिलचस्प कोड जनरेटर को उपयोगी होने के लिए स्वयं को कुछ जोड़ना होगा। –

+0

जिस जानकारी के बारे में आप बात करते हैं वह पहले से ज्ञात नहीं है और यहां तक ​​कि यदि यह पता है, तो आप जानकारी के द्रव्यमान के बारे में बात कर रहे हैं जो हर साल कानून परिवर्तन के कारण बदलता है ... उदाहरण: एक xbrl/xsd जिसे आप उत्पन्न करने के लिए उपयोग करना चाहते हैं कोड और संबंधित सत्यापन ... – edbras

+0

http://stackoverflow.com/questions/121324/a-java-api-to-generate-java-source-files –

उत्तर

1

शायद आपको cglib में रुचि होनी चाहिए? आप शायद इस पर एक नज़र लेने के लिए होगा

:

3

विभिन्न क्षमताओं और उपयोग में आसानी के साथ कई पुस्तकालयों रहे हैं निर्धारित करने के लिए प्रत्येक का एपीआई ई जो आपके उद्देश्यों के लिए अधिक उपयुक्त है।

+4

डुप्लिकेट ये सब (शायद cglib को छोड़कर) बाइट लगते हैं -कोड-संपादन उपकरण, स्रोत कोड जनरेटर नहीं ... –

+0

प्रतिक्रिया के लिए धन्यवाद, लेकिन जैसा कि पहले से ही उल्लेख किया गया है, मुख्य रूप से बाइट कोड जनरेटर हैं, और मैं स्रोत कोड जेनरेटर के बारे में बात कर रहा हूं। मैंने देखा है कि परिपक्व स्टैंड-अलोन सोर्स कोड जनरेटर प्रोजेक्ट नहीं है, लेकिन ज्यादातर उप प्रोजेक्ट जैसे कोडोडेल और अपाचे जैक्समे ... जो अक्सर "पुराना" – edbras

+0

@edbras: मैंने सोचा था कि आप बाइटकोड पीढ़ी के बारे में पूछ रहे हैं, क्योंकि जावा में कोड पीढ़ी के बारे में बात करते समय ज्यादातर लोगों का क्या मतलब है। आम तौर पर, कोड जेनरेटर का उद्देश्य उच्च स्तरीय अबास्ट्रक्शन के उपयोग की अनुमति देना है। आउटपुट पर विचार करने से पहले जावा * स्रोत * कोड पहले से ही आपके मामले में वह अवशोषण क्या होगा? – thkala

0

मुझे ASM सबसे अच्छा लगता है। यह एक विज़िटर पैटर्न का उपयोग करता है जो पहली बार कोड उत्पन्न कर रहा है जब थोड़ा उलझन में हो सकता है; लेकिन एक बार जब आप इसे समझ लेंगे, तो यह वास्तव में साफ और आसान है।

0

मैंने इसे थोड़ी देर पहले देखा है और कुछ भी उपयोगी खोजने में काफी कठिन समय था। सबसे होनहार उम्मीदवार मैंने पाया वास्तव में सही संकलक में बनाया गया था:

Java annotation processing (APT)

वे हाल ही में javac साथ अपार्ट शामिल है, इसलिए यह हमेशा उपलब्ध होता है।

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

+0

उत्पन्न करने के लिए अपाचे जैक्समे सबप्रोजेक्ट का उपयोग करके एनोटेशन प्रोसेसिंग बहुत अद्भुत लगती है, जब तक कि आप वास्तव में इसका उपयोग करने की कोशिश नहीं कर लेते। पिछली बार मैंने चेक किया था, आपको हुप्स की अविश्वसनीय राशि के माध्यम से कूदना पड़ा वर्तमान स्रोत फ़ाइल प्राप्त करें और आपको अभी भी * अपने निर्माण प्रणाली के साथ गड़बड़ करने की आवश्यकता है ... कभी-कभी मुझे सी प्रीप्रोसेसर याद आती है ... – thkala

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