2015-03-22 6 views
18

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

क्या उनके लिए किसी भी तरह से चलाने के लिए आदेश निर्दिष्ट करने का कोई तरीका है, या क्या मुझे बस दो एपी को गठबंधन करने में सक्षम नहीं होने के साथ रहना है?

मैंने SSCCE test case का उत्पादन किया है।

एक साधारण git clone & mvn compile मुद्दा प्रदर्शित करने के लिए पर्याप्त है - अगर आप लाइन 18 और टिप्पणी हटाएं लाइनों App.java में 20-21 टिप्पणी है, यह संकलन होगा, भले ही लाइन 18 में लंबोक अंकन एक समान निर्माता बनाता है। समस्या यह है कि लॉगरोक डैगर के बाद दौड़ना प्रतीत होता है।

उत्तर

12

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

मैं लोम्बोक-मैवेन प्लगइन के साथ गया और पूरी चीज को डूबने वाला, जो सही और कुछ हद तक हैकी नहीं है, लेकिन कम से कम एक कामकाजी परिणाम उत्पन्न करता है। उम्मीद है कि यह यहां आने वाले भविष्य के googlers की सहायता कर सकता है, मैं रेपो में working version प्रतिबद्ध किया।

+1

मैंने इन टुकड़ों के कारण व्यक्तिगत रूप से लंबोक को छोड़ दिया और जावैक द्वारा समर्थित ढांचे में जाने की कोशिश की, या सादे जावा पर वापस आ गया। मूल्य वस्तुओं के लिए, मैं @AutoValue का उपयोग करता हूं। मैं ग्रोवी के साथ भी प्रयोग कर रहा हूं।मैं आदर्श रूप से एस्पेक्टजे बुनाई एनोटेशन प्रोसेसिंग (जैसे डैगर और ऑटोवैल्यू में मौजूद) के साथ काम करना चाहता हूं लेकिन https://bugs.eclipse.org/bugs/show_bug.cgi?id=462782 में आया था। –

+0

क्या इस समस्या के आसपास कोई नया काम रहा है .. हो सकता है कि कोटलिन जीवन को आसान बना दे, लेकिन इसका मतलब अभी भी कोड –

+0

में बहुत से रिफैक्टरिंग का मतलब है [लंबोक v1.16.12 चेंजलॉग] (https://projectlombok.org/changelog) सुझाव देता है कि लंबोक और डैगर दोनों को एक साथ चलाने/सुधारने के लिए काम किया गया है, लेकिन मुझे इसे आजमाने का मौका नहीं मिला है। – Torque

9

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

आप डैगर्स और Lombok's build process पर देख सकते हैं और देख सकते हैं कि कौन से प्रोसेसर लगाए जाते हैं। फिर स्पष्ट रूप से अपने मेवेन में उन प्रोसेसर को सही क्रम में बनाएं और विभिन्न कंपाइलर्स का परीक्षण करें और देखें कि इनमें से कोई भी उन्हें इस क्रम में चलाता है या नहीं।

यदि आवश्यक हो, तो आप संकलन प्रक्रिया को विभाजित कर सकते हैं और पहले -proc:only के साथ लंबोक को चला सकते हैं और उसके बाद लंबोक के बिना एक और संकलन चरण और मैनिपुलेटेड फ़ाइलों को ओवरराइड किए बिना (यदि यह संभव है, तो मैंने कभी कोशिश नहीं की)।

5

-processor ध्वज का उपयोग करके जावैक में एनोटेशन प्रोसेसर के क्रम को निर्दिष्ट करना संभव है। हालांकि, मुझे इस पैरामीटर सेट के साथ भी संकलन नहीं मिला। मुझे संदेह है कि डैगर सीधे स्रोत कोड को देखता है, या एनोटेशन प्रोसेसर एपीआई एक ही दौर में एनोटेशन प्रोसेसर को शेड्यूल करता है और लोम्बोक द्वारा संशोधित नहीं किया जाता है।

मुझे लगता है कि ऑर्डर को मजबूर करने के लिए अब सबसे मजबूत समाधान delombok का उपयोग करना है।

प्रकटीकरण: मैं एक लंबोक डेवलपर हूं।

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