โถ uber คืออะไร?


251

ฉันกำลังอ่านเอกสาร Maven และเจอชื่อ 'uber-jar'

uber-jar หมายถึงอะไรและมีคุณสมบัติ / ข้อได้เปรียบอะไร


14
อีกคำสำหรับ "uber jar" หรือ "super jar" ก็คือ "fat jar" ดูstackoverflow.com/questions/19150811/...
erwaman

ฉันเคยเห็นบางครั้งเรียกว่า "onejar" หรือ "one-jar"
Jeen Broekstra

คำตอบ:


357

Überเป็นคำภาษาเยอรมันสำหรับaboveหรือover(จริง ๆ แล้วมันคุ้นเคยกับภาษาอังกฤษover)

ดังนั้นในบริบทนี้ uber-jar คือ "over-jar" ซึ่งเพิ่มขึ้นหนึ่งระดับจาก JAR แบบง่าย(a)ซึ่งถูกกำหนดเป็นหนึ่งที่มีทั้งแพ็กเกจของคุณและการพึ่งพาทั้งหมดในไฟล์ JAR ไฟล์เดียว ชื่อสามารถถูกคิดว่ามาจากคอกม้าเดียวกับ ultrageek, superman, hyperspace และ metadata ซึ่งทั้งหมดมีความหมายคล้ายกันของ "เกินกว่าปกติ"

ข้อดีคือที่คุณสามารถแจกจ่ายของคุณ Uber-ขวดและไม่สนใจที่ทุกคนหรือไม่ว่าการอ้างอิงมีการติดตั้งที่ปลายทางเช่น Uber-ขวดของคุณจริงมีไม่มีการอ้างอิง

การอ้างอิงทั้งหมดของสิ่งของของคุณภายใน uber-jar นั้นก็อยู่ใน uber-jar นั้นด้วย เช่นเดียวกับการพึ่งพาทั้งหมดของการอ้างอิงเหล่านั้น และอื่น ๆ


(a)ฉันอาจไม่ต้องอธิบายว่า JAR คืออะไรสำหรับนักพัฒนา Java แต่ฉันจะรวมไว้เพื่อความสมบูรณ์ เป็นไฟล์เก็บถาวร Java โดยทั่วไปไฟล์เดียวที่โดยทั่วไปจะมีไฟล์คลาส Java จำนวนหนึ่งพร้อมกับข้อมูลเมตาและทรัพยากรที่เกี่ยวข้อง


แปลก ... ฉันเป็นชาวเยอรมันและแน่นอนรู้คำว่า "über" และความหมาย แต่ทำไมถึงใช้ที่นี่ในบริบท Maven กรณีนี้หมายความว่ามีสิ่งหนึ่งอย่างหรือมากกว่านั้นรวมเข้าด้วยกันและสามารถเข้าถึงได้ผ่านทาง jar ที่สร้างขึ้น น่าเสียดายที่คำใบ้นี้ไม่ได้ทำให้ฉันไม่พอใจปัญหา maven ของฉัน ;-)
Bjoern

7
BTW, überและoverเป็นผลมาจากการเปลี่ยนแปลงแกนนำในระบบเก่าดั้งเดิมซึ่งสามารถสังเกตได้ในคู่คำเหล่านี้: geben/give, leben/live, haben/have, heben/heaveและอื่น ๆ อีกมากมาย
biziclop

คำอธิบายที่ฉลาดมาก: ลิงค์
Veniamin

ด้วยความเศร้าใจที่ฉันได้พยายามให้การศึกษาแก่ผู้คนฉันจึงตัดสินใจลบสิ่งที่บางคนบ่นไป ฉันยังคงนิยาม uber ในบริบทของภาษาเยอรมัน แต่ตอนนี้บทเรียนประวัติศาสตร์ (ค่อนข้างละเอียด) หายไป :-)
paxdiablo

58

ubar jarเป็นที่รู้จักกันว่าjar ไขมันเช่นjar ที่มีการอ้างอิง
มีวิธีการทั่วไปสามวิธีในการสร้าง uber jar:

  1. Unshaded:แกะไฟล์ JAR ทั้งหมดออกจากนั้นหีบห่อไฟล์เหล่านั้นลงใน JAR เดียว ทำงานร่วมกับคลาสโหลดเดอร์เริ่มต้นของ Java เครื่องมือmaven-assembly-plugin
  2. แรเงา:เหมือนกับไม่แรเงาแต่เปลี่ยนชื่อ (เช่น "โป๊ะ") แพ็คเกจทั้งหมดของการขึ้นต่อกันทั้งหมด ทำงานร่วมกับคลาสโหลดเดอร์เริ่มต้นของ Java หลีกเลี่ยงการปะทะกันของเวอร์ชันการพึ่งพา (ไม่ใช่ทั้งหมด) เครื่องมือmaven-shade-plugin
  3. JAR of JARs:ไฟล์ JAR สุดท้ายมีไฟล์ JAR อื่น ๆ ที่ฝังอยู่ภายใน หลีกเลี่ยงเวอร์ชันการพึ่งพา ไฟล์ทรัพยากรทั้งหมดถูกสงวนไว้ เครื่องมือ: Eclipse JAR File Exporter

มากขึ้น


57

คำนิยาม Paxdiablo ดีจริงๆ

นอกจากนี้โปรดพิจารณาว่าการส่ง uber-jar นั้นค่อนข้างน่าสนใจหากคุณต้องการเผยแพร่ซอฟต์แวร์และไม่ต้องการให้ลูกค้าดาวน์โหลดการอ้างอิงด้วยตัวเอง หากนโยบายของพวกเขาไม่อนุญาตให้ใช้ไลบรารีบางอย่างหรือถ้าพวกเขาต้องผูกส่วนประกอบพิเศษบางอย่าง (slf4j, libs ที่สอดคล้องกับระบบ, arch specialiez libs, ... ) สิ่งนี้จะเพิ่มความยากให้พวกเขา .

คุณสามารถทำได้:

วิธีแก้ปัญหาที่สะอาดกว่าคือการจัดหาไลบรารี่ของคุณแยกจากกัน maven-shade-plugin มี descriptor ที่กำหนดค่าไว้ล่วงหน้าสำหรับสิ่งนั้น สิ่งนี้ไม่ซับซ้อนกว่าในการทำ (ด้วย maven และปลั๊กอิน)

ในที่สุดทางออกที่ดีจริงๆก็คือการใช้ OSGI Bundle มีแบบฝึกหัดที่ดีมากมายที่ :)

สำหรับการกำหนดค่าเพิ่มเติมโปรดอ่านหัวข้อเหล่านี้:


4

ไฟล์เก็บถาวร Java แบบปฏิบัติการด้วยตนเอง ในกรณีของ WildFly Swarm uberjars มันเป็นไฟล์. jar เดียวที่มีแอปพลิเคชันของคุณส่วนของ WildFly ที่จำเป็นต้องใช้เพื่อสนับสนุนมันที่เก็บ Maven ภายในของการพึ่งพารวมถึงชิมที่จะบูตมันทั้งหมด ดูนี่


0

ชื่อที่แตกต่างกันเป็นเพียงวิธีการในการทำจาวาบรรจุภัณฑ์

สกินนี - มีเพียงบิตที่คุณพิมพ์ลงในตัวแก้ไขรหัสของคุณเท่านั้นและไม่มีอะไรอื่น

บาง - มีทั้งหมดข้างต้น PLUS ของแอพโดยตรงของแอพของคุณ (ไดรเวอร์ฐานข้อมูล, ยูทิลิตี้ไลบรารี, ฯลฯ )

Hollow - อินเวิร์สของ Thin - มีเพียงบิตที่จำเป็นในการเรียกใช้แอพของคุณ แต่ไม่มีแอพนั้น โดยพื้นฐานแล้วคือ "เซิร์ฟเวอร์แอป" ที่ทำแพ็กเกจไว้ล่วงหน้าซึ่งคุณสามารถนำแอปของคุณไปใช้ในลักษณะเดียวกับเซิร์ฟเวอร์แอป Java EE แบบดั้งเดิม แต่มีความแตกต่างที่สำคัญ

Fat / Uber - มีบิตที่คุณเขียนเองบวกกับการพึ่งพาโดยตรงของแอพของคุณรวมถึงบิตที่จำเป็นในการเรียกใช้แอปของคุณ“ ด้วยตัวเอง”

ที่มา: บทความจาก Dzone

การแสดงภาพประเภท JAR

โพสต์ซ้ำจาก: https://stackoverflow.com/a/57592130/9470346

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.