लुम्बोक कैसे काम करता है?


148

मैं आज लुम्बोक से मिला ।
मैं यह जानने के लिए बहुत उत्सुक हूं कि यह कैसे काम करता है।
एक जावा Geek अनुच्छेद कुछ सुराग देता है, लेकिन यह मेरे लिए पूरी तरह से स्पष्ट नहीं है:

जावा 6 एप को हटाता है और जेवैक को एनोटेशन को प्रबंधित करने में सक्षम बनाता है, सरल सिंगल स्टेप कंप्यूटिंग प्राप्त करने के लिए प्रक्रिया को सुव्यवस्थित करता है। यह लोम्बोक द्वारा लिया गया रास्ता है।

शायद जावा 6 के साथ संकलन प्रक्रिया होगी: javac -> apt -> lombok apt प्रक्रिया -> वर्ग फ़ाइलों को पढ़ें और ASM का उपयोग करके सेट / प्राप्त करने की विधियाँ जोड़ें ?

क्या आप मुझे तंत्र के बारे में अधिक जानकारी दिखा सकते हैं?


1
इस लेख की जाँच करें: stackextend.com/java/first-step-lombok-annotations
Mouad EL Fakir

जवाबों:


135

लोम्बोक वास्तव में आंतरिक एपीआई के खिलाफ कोड करता है, जैसा कि सीन पैट्रिक फ्लॉयड ने कहा था। हालांकि, जैसा कि लोमबोक केवल संकलन चरण में शामिल है, लोमोनोक का दावा करने के लिए इसका भ्रामक केवल एक सूरज वीएम पर चलेगा। यह केवल एक्ज या सूरज की ज्वाला पर संकलन करेगा। हालांकि, वीएम के अधिकांश हिस्से वहां से बाहर निकलते हैं, यदि वे एक कंपाइलर को जहाज में रखते हैं, उन दो में से एक है। उदाहरण के लिए, स्टॉक सन ज्वाॅक के साथ एप्पल वीएम जहाज, और इस तरह के लुम्बोक मैक पर ठीक काम करता है। उदाहरण के लिए, सेम विलायती वीएम के लिए जाता है।

जबकि javac के लिए हमें वास्तव में उनके अपडेट्स के साथ रहना पड़ता है, आंशिक रूप से अभी उनके कंपाइलर पर बहुत सारे काम चल रहे हैं, हमें ग्रहण के कई संस्करणों में हमारे ग्रहण समर्थन में सिर्फ 1 मामूली समायोजन करना पड़ा है। इसलिए, जब हम आंतरिक एपीआई के खिलाफ कोड करते हैं, तो वे अपेक्षाकृत स्थिर बिट्स होते हैं।

अगर आंतरिक एपीआई का सहारा लिए बिना क्या किया जा सकता है, तो हमने कुछ और किया होगा, लेकिन ऐसा नहीं किया जा सकता है, इसलिए हम आंतरिक एपीआई का उपयोग करते हैं।

नायब: मैं लोबोक के प्रमुख डेवलपर्स में से एक हूं, इसलिए, मैं शायद थोड़ा पक्षपाती हूं: पी


7
स्रोत (+1) से सुनकर बहुत अच्छा लगा। मैं मानता हूं, दौड़ने के बारे में मेरा बयान भ्रामक था। मेरा मतलब था कि लोम्बोक केवल सूर्य वीएम पर चल सकता है, लेकिन परिणामी कोड निश्चित रूप से मंच तटस्थ है।
सीन पैट्रिक फ्लोयड

मुझे आश्चर्य है कि अगर एनोटेशन प्रोसेसर सब कुछ ग्रहण करने वाले कंपाइलर को सौंप सकता है, भले ही इसे जावासी के माध्यम से चलाया जा रहा हो, जिस तरह से कॉल करने के लिए केवल एक प्रोसेसर है।
आर्किमिडीज ट्रेजानो

@rzwitserloot: यही कारण है कि मैं वास्तव में एसओ को पसंद करता हूं। कोर देव से वास्तविक जवाब खुद।
गौरव

78

यह जावा 6 में उपलब्ध JSR 269 प्लगनेबल एनोटेशन प्रोसेसिंग एपीआई का उपयोग करता है ।

ध्यान दें कि lombok.jarएक फ़ाइल नाम है /META-INF/services/javax.annotation.processing.Processor। जब javacइस फ़ाइल को एक संकलन क्लासपाथ में देखता है, तो यह संकलन के दौरान वहाँ परिभाषित एनोटेशन प्रोसेसर चलाता है।


शानदार जवाब @axtavt!
गौरव

54

Axtavt के उत्तर के परिशिष्ट में: लोम्बोक JSR 269 एपी एक्सपोज से अधिक उपयोग करता है। लोम्बोक कोड एक के खिलाफ) आंतरिक जावा एपिस और बी) आंतरिक ग्रहण एपिस (एक अलग प्रोसेसर में)। JSR 269 आपको मौजूदा स्रोत कोड को संशोधित करने की अनुमति नहीं देता है, लेकिन जब आप Elementअंतर्निहित एएसटी नोड को डालते हैं, तो आप वास्तव में एएसटी को संशोधित कर सकते हैं (जो कि प्रोजेक्ट लोम्बोक करता है)।

तो लोम्बोक एक बहुत बड़ा हैक है जो केवल एक सन वीएम (एफएक्यू) पर संकलन चलाएगा । यह एक बेहतरीन सॉफ्टवेयर है, लेकिन इस तरह के गैर-मानक हैक होने के कारण कई लोगों को इससे नफरत है।


1
क्या यह अभी भी मान्य जानकारी है?
ओन्ड्रा žइस्का

1
हाँ। यह सच है, यह सब।
सीन पैट्रिक फ्लॉयड

@SeanPatrickFloyd परिशिष्ट: मुझे लोनजैक एनोटेशन को OpenJDK 11 के साथ संकलित करने में अभी तक कोई समस्या नहीं है।
लोम्बोक

1
@orenaena हाँ, यह काम करना चाहिए। जब तक आप एक दूसरे एनोटेशन प्रोसेसर को पेश नहीं करते हैं, और अचानक दौड़ की स्थिति में भाग लेते हैं क्योंकि लोम्बोक एएसटी बदल रहा है दूसरे प्रोसेसर को खोजने की उम्मीद है।
शॉन पैट्रिक फ्लोयड

2
मैं अपने स्वयं के प्रश्न का उत्तर देने का प्रयास करूंगा, कृपया जब आपको मौका मिले "" जब से ग्रूवी / कोटलिन अपने फुलब्लैक कंपाइलर के साथ आता है, जो कि बायटेकोड उत्पन्न करने का ख्याल रखेगा। किसी अन्य कंपाइलर (जावा कंपाइलर) बायटेकोड पीढ़ी प्रक्रिया को हैक करने की आवश्यकता नहीं है।
रैंडम-ड्यूड

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.