एक उबर जार क्या है?


251

मैं मावेन प्रलेखन पढ़ रहा हूं और 'उबर-जार' नाम से आया हूं।

उबेर-जार का क्या अर्थ है और इसकी विशेषताएं / फायदे क्या हैं?


14
एक "उबर जार" या "सुपर जार" के लिए एक और शब्द "मोटा जार" है। Stackoverflow.com/questions/19150811/… देखें ।
इरवामन

मैंने कभी-कभी इसे "वनजर" या "वन-जार" भी कहा है।
जेएन ब्रोकेस्ट्रा

जवाबों:


357

Überके लिए जर्मन शब्द aboveया over(यह वास्तव में अंग्रेजी के साथ संज्ञानात्मक है over)।

इसलिए, इस संदर्भ में, एक uber-jar एक "ओवर-जार" है, एक साधारण JAR (ए) से एक स्तर ऊपर, एक के रूप में परिभाषित किया गया है जिसमें एक एकल JAR फ़ाइल में आपके पैकेज और इसकी सभी निर्भरता दोनों शामिल हैं । नाम को उसी स्थिर से आने के लिए सोचा जा सकता है जैसे कि अल्ट्रैजेक, सुपरमैन, हाइपरस्पेस और मेटाडेटा, जो सभी "सामान्य से परे" के समान अर्थ रखते हैं।

लाभ यह है कि आप अपने uber-jar को वितरित कर सकते हैं और इस बात की परवाह नहीं कर सकते हैं कि गंतव्य पर निर्भरताएं स्थापित हैं या नहीं, क्योंकि आपके uber-jar की वास्तव में कोई निर्भरता नहीं है।

Uber-jar के भीतर आपके अपने सामान की सभी निर्भरताएं उस uber-jar के भीतर भी हैं । जैसा कि उन निर्भरताओं के सभी निर्भरताएं हैं। और इसी तरह।


(ए) मुझे शायद यह नहीं बताना चाहिए कि एक जावा डेवलपर के लिए एक जार क्या है लेकिन मैं इसे पूर्णता के लिए शामिल करूंगा। यह एक जावा संग्रह है, जो मूल रूप से एक एकल फ़ाइल है जिसमें आम तौर पर संबद्ध मेटाडेटा और संसाधनों के साथ कई जावा वर्ग की फाइलें शामिल हैं।


अजीब बात है ... मैं एक जर्मन हूं और निश्चित रूप से शब्द "उबर" और अर्थ जानता हूं। लेकिन मावेन संदर्भ में इसका उपयोग क्यों किया जाता है? इस मामले का मतलब है कि एक या एक से अधिक चीजें एक साथ इकट्ठा होती हैं और उत्पन्न जार के माध्यम से पहुंच योग्य होती हैं। Unfortunateley इस संकेत मेरी Maven मुद्दा ;-) sovle नहीं था
जोएर्न

7
Btw, überऔर over: कर रहे हैं पुराने युरोपीय में एक व्यवस्थित मुखर पारी जो भी इन शब्द जोड़े में मनाया जा सकता का परिणाम geben/give, leben/live, haben/have, heben/heaveऔर कई और अधिक।
बिजिकलोप

बहुत ही स्मार्ट विवरण: उदाहरण लिंक
वेनमिन

लोगों को शिक्षित करने की कोशिश करने के बारे में मुझे कितना दुःख हुआ है, यह देखते हुए मैंने सिर्फ उस सामान को हटाने का फैसला किया है जिसके बारे में कुछ शिकायत करते रहते हैं। मैं अभी भी जर्मन भाषा के संदर्भ में uber को परिभाषित करता हूं लेकिन (कुछ हद तक क्रियात्मक) इतिहास सबक अब चला गया है :-)
paxdiablo

58

ऊबर जार को वसा जार यानी जार पर निर्भरता के साथ भी जाना जाता है
एक uber जार के निर्माण के तीन सामान्य तरीके हैं:

  1. अनशेडेड: सभी JAR फ़ाइलों को अनपैक करें, फिर उन्हें एक JAR में रीपैक करें। जावा के डिफॉल्ट क्लास लोडर के साथ काम करता है। उपकरण मावेन-असेंबली-प्लगइन
  2. छायांकित: समान रूप से अपरिवर्तित, लेकिन नाम बदलें (यानी, "शेड") सभी निर्भरता के सभी पैकेज । जावा के डिफॉल्ट क्लास लोडर के साथ काम करता है। कुछ (सभी नहीं) निर्भरता संस्करण झड़पों से बचा जाता है। उपकरण मावेन-शेड-प्लगइन
  3. JAR की JAR: अंतिम JAR फ़ाइल में अन्य JAR फाइलें शामिल हैं। अवॉयड डिपेंडेंसी वर्जन क्लैश। सभी संसाधन फ़ाइलें संरक्षित हैं। उपकरण: ग्रहण जार फ़ाइल निर्यातक

अधिक जानकारी के लिए


57

Paxdiablo की परिभाषा वास्तव में अच्छी है।

इसके अलावा, कृपया एक uber-jar वितरित करने पर विचार करें, कभी-कभी काफी दिलचस्प होता है, यदि आप वास्तव में एक सॉफ़्टवेयर वितरित करना चाहते हैं और ग्राहक को खुद से निर्भरता डाउनलोड नहीं करनी है। ड्रॉ बैक के रूप में, यदि उनकी स्वयं की नीति कुछ लाइब्रेरी के उपयोग की अनुमति नहीं देती है, या यदि उन्हें कुछ अतिरिक्त-घटकों (slf4j, सिस्टम कंप्लेंट लिबास, आर्क स्पेशल स्पेशल लिबास, ...) को बांधना है, तो यह संभवतः उनके लिए मुश्किलें बढ़ा देगा। ।

आप ऐसा कर सकते हैं:

एक क्लीनर समाधान अलग से तेर पुस्तकालय प्रदान करना है; maven-shade-plugin के पास इसके लिए पूर्वनिर्धारित विवरणक है। यह करने के लिए अधिक जटिल नहीं है (मावेन और इसके प्लगइन के साथ)।

अंत में, OSGI बंडल का उपयोग करने के लिए वास्तव में अच्छा समाधान है। उस पर बहुत सारे अच्छे ट्यूटोरियल हैं :)

आगे के विन्यास के लिए, कृपया उन विषयों को पढ़ें:


4

एक स्व-निहित, निष्पादन योग्य जावा संग्रह। WildFly झुंड uberjars के मामले में, यह एक एकल .jar फ़ाइल है जिसमें आपका आवेदन है, WildFly के हिस्से को इसका समर्थन करने के लिए आवश्यक है, निर्भरता का एक आंतरिक मैवेन भंडार, और यह सब बूट करने के लिए एक शिम है। यह देखो


0

विभिन्न नाम सिर्फ java apps की पैकेजिंग के तरीके हैं।

स्कीनी - इसमें केवल वही बिट्स होते हैं जो आप सचमुच अपने कोड संपादक में टाइप करते हैं, और कुछ भी नहीं।

पतला - उपरोक्त सभी में आपके ऐप के ऐप की प्रत्यक्ष निर्भरता (db ड्राइवर, यूटिलिटी लाइब्रेरी आदि) शामिल हैं।

खोखले - पतले का विलोम - आपके ऐप को चलाने के लिए केवल बिट्स की आवश्यकता होती है, लेकिन इसमें ऐप ही नहीं होता है। मूल रूप से एक पूर्व-पैक किया गया "ऐप सर्वर", जिसे आप बाद में अपने ऐप को पारंपरिक जावा ईई ऐप सर्वरों के समान शैली में, लेकिन महत्वपूर्ण अंतरों के साथ तैनात कर सकते हैं।

फैट / उबेर - शामिल बिट आप सचमुच अपने आप को लिखने प्लस अपने अनुप्रयोग के प्रत्यक्ष निर्भरता प्लस बिट्स "अपने आप ही" अपने अनुप्रयोग चलाने के लिए की जरूरत है।

स्रोत: Dzone से लेख

JAR प्रकार के दृश्य प्रतिनिधित्व

से पुनर्प्राप्त: https://stackoverflow.com/a/57592130/9470346

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