पृष्ठभूमि:Maven/Retrolambda: कैसे 8 वर्गों जावा पर निर्भरता का पता लगाने के
हम maven
आधारित जावा परियोजना है, जो JRE 1.7 को लक्षित करता है, लेकिन स्रोत कोड lambdas का उपयोग करता है, तो हम Java 8
बदलने के लिए retrolambda
का उपयोग स्रोत कोड Java 7
पर। इसके अलावा हम StreamSupport backport लाइब्रेरी का उपयोग जब हम नदियों की जरूरत है, कार्य करते हैं। *, वैकल्पिक, आदि retrolambda
की
प्रयोग 1.8 करने के लिए परियोजना की दोनों स्रोत और लक्ष्य भाषा के स्तर को विन्यस्त करना शामिल है।
सब कुछ ठीक काम करता है अगर वहाँ java8 वर्ग या तरीकों पर कोई निर्भरता (जैसे java.util.stream.*
, java.util.Optional
, या तरीकों java8
Collection.forEach
तरह से प्रारंभ) कर रहे हैं। अगर वहाँ इस तरह के प्रयोगों तो गुजरता निर्माण कर रहे हैं, लेकिन यह, क्रम में विफल रहता है जब जावा 8. की JVM के तहत चल रहा
प्रश्न:
मेरा लक्ष्य मामले में निर्माण विफल जब इस तरह निर्भरता मौजूद है। क्या बिल्ड-टाइम में नए Java 8
वर्ग/विधियों पर निर्भरताओं का पता लगाने का कोई तरीका है?
मैं के बारे में 2 संभव विकल्प सोचा, लेकिन मुझे यकीन है कि क्या उनमें से या तो संभव है नहीं कर रहा हूँ:
- पूर्वनिर्धारित वर्गों और तरीकों पर depdencies पता लगाने के लिए बाईटकोड विश्लेषक के कुछ प्रकार। क्या ऐसे उपकरण/मेवेन प्लगइन्स हैं?
- लिंट (
lint4j
) नियम। सुनिश्चित नहीं हूं कि यहlint
जावा 7 स्थापना के 'rt.jar' को इंगित करते समय बस संकलित करते समय बूटस्ट्रैप क्लासपाथ को बदलें। संकलक को लैम्ब्डा अभिव्यक्तियों के साथ काम करने के लिए, आपको पथ में एक डमी जार जोड़ना पड़ सकता है, जिसमें 'लैम्ब्डा मेटा फैक्ट्री' वर्ग होता है जिसमें संकलन की पुष्टि होती है, यदि संकलक इसे सत्यापित करता है। उन्हें काम करने की ज़रूरत नहीं है, फिर भी आप संकलित कोड को रेट्रोलंबडा के साथ संसाधित करेंगे (फिर, वास्तविक जेआरई 8 के साथ)। – Holger
होल्गर के बाद, यह प्रक्रिया मेरे लिए काम करती है: जेएमई ''rt.jar' के अंदर' लैम्ब्डा कॉन्टेरियंस अपवाद ',' लैम्ब्डा मेटाफैक्टरी 'और' सीरियलाइज्डलैम्डा 'के लिए स्टब्स डालें (एक अतिरिक्त डमी जार का उपयोग करके मेरे मामले में काम नहीं किया। मुझे" घातक त्रुटि: क्लासपाथ या बूटक्लासपैथ में पैकेज java.lang को खोजने में असमर्थ ")। फिर maven-compiler-plugin को बढ़ाए गए rt.jar पर अपने '' टैग के माध्यम से इंगित करें। एक परीक्षण के रूप में, मैंने [streamsupport] (https://sourceforge.net/projects/streamsupport/) स्रोतों को संकलित किया (sans j8.u.DelegatingSpliterator जो जावा 8 एपीआई का उपयोग करता है और इसलिए जावा 7 rt.jar के साथ संकलित नहीं है) । –
जेआरई 7 के साथ अपना टेस्ट सूट चलाने का एक तरीका हो सकता है। यदि आप जावा 8 एपीआई का उपयोग करते हैं तो अपवादों को फेंक दिया जाना चाहिए। –