Apa itu toples uber?

251

Saya membaca dokumentasi Maven dan menemukan nama 'uber-jar'.

Apa arti uber-jar dan apa saja fitur / kelebihannya?

Ashay Batwal
sumber
14
Istilah lain untuk "toples uber" atau "toples super" adalah "toples lemak". Lihat stackoverflow.com/questions/19150811/… .
erwaman
Saya juga kadang-kadang melihatnya disebut "onejar" atau "one-jar".
Jeen Broekstra

Jawaban:

357

Überadalah kata Jerman untuk aboveatau over(sebenarnya serumpun dengan bahasa Inggris over).

Karenanya, dalam konteks ini, uber-jar adalah "over-jar", satu tingkat lebih tinggi dari JAR sederhana (a) , didefinisikan sebagai yang berisi paket Anda dan semua dependensinya dalam satu file JAR tunggal. Nama ini dapat dianggap berasal dari kandang yang sama dengan ultrageek, superman, hyperspace, dan metadata, yang semuanya memiliki arti yang sama "di luar normal".

Keuntungannya adalah Anda dapat mendistribusikan tabung-uber Anda dan tidak peduli sama sekali apakah dependensi dipasang atau tidak, karena tabung-uber Anda sebenarnya tidak memiliki dependensi.

Semua dependensi barang Anda sendiri di dalam toples-uber juga ada di dalam jar-uber itu. Seperti semua dependensi dari dependensi tersebut. Dan seterusnya.


(a) Saya mungkin tidak perlu menjelaskan apa itu JAR untuk pengembang Java tapi saya akan memasukkannya untuk kelengkapan. Ini adalah arsip Java, pada dasarnya satu file yang biasanya berisi sejumlah file kelas Java bersama dengan metadata dan sumber daya terkait.

paxdiablo
sumber
Aneh ... Saya seorang Jerman dan tentu saja tahu kata "über" dan artinya. Tetapi mengapa ini digunakan di sini dalam konteks Maven? Kasus ini berarti bahwa satu atau lebih hal dikumpulkan bersama dan diakses melalui toples yang dihasilkan. Sayangnya petunjuk ini tidak sovle masalah pakar saya ;-)
Bjoern
7
BTW, überdan overmerupakan hasil dari pergeseran vokal yang sistematis di Old Jermanik yang juga dapat diamati pada pasangan kata ini: geben/give, leben/live, haben/have, heben/heavedan banyak lagi.
biziclop
Deskripsi yang sangat cerdas: Contoh tautan
Veniamin
Mengingat betapa banyak kesedihan yang saya dapatkan ketika mencoba mendidik orang, saya memutuskan untuk menghapus hal-hal yang terus dikeluhkan oleh beberapa orang. Saya masih mendefinisikan uber dalam konteks bahasa Jerman tetapi pelajaran sejarah (agak bertele-tele) sekarang hilang :-)
paxdiablo
58

guci ubar juga dikenal sebagai guci lemak yaitu guci dengan dependensi.
Ada tiga metode umum untuk membuat tabung uber:

  1. Tidak berarsir: Buka paket semua file JAR, lalu bungkus kembali menjadi satu JAR. Bekerja dengan pemuat kelas default Java. Alat maven-assembly-plugin
  2. Berarsir: Sama dengan yang tidak diarsir, tetapi ganti nama (yaitu, "teduh") semua paket dari semua dependensi. Bekerja dengan pemuat kelas default Java. Menghindari beberapa benturan versi ketergantungan (tidak semua). Alat maven-shade-plugin
  3. JAR JARs: File JAR terakhir berisi file JAR lain yang tertanam di dalamnya. Menghindari bentrokan versi ketergantungan. Semua file sumber daya dipertahankan. Alat: Eksportir File JAR Eclipse

untuk lebih

Premraj
sumber
57

Definisi Paxdiablo sangat bagus.

Selain itu, harap pertimbangkan untuk mengirimkan uber-jar terkadang cukup menarik, jika Anda benar-benar ingin mendistribusikan perangkat lunak dan tidak ingin pelanggan harus mengunduh dependensi sendiri. Sebagai imbalannya, jika kebijakan mereka sendiri tidak mengizinkan penggunaan beberapa perpustakaan, atau jika mereka harus mengikat beberapa komponen tambahan (slf4j, lib sistem yang sesuai, lib lengkungan specialiez, ...) ini mungkin akan meningkatkan kesulitan bagi mereka .

Anda dapat melakukan itu:

Solusi yang lebih bersih adalah menyediakan tiga perpustakaan secara terpisah; maven-shade-plugin memiliki deskriptor yang telah dikonfigurasikan sebelumnya untuk itu. Ini tidak lebih rumit untuk dilakukan (dengan maven dan plugin-nya).

Akhirnya, solusi yang sangat bagus adalah menggunakan Bundel OSGI. Ada banyak tutorial bagus tentang itu :)

Untuk konfigurasi lebih lanjut, baca topik-topik tersebut:

Jean-Rémy Revy
sumber
4

Arsip Java mandiri yang dapat dieksekusi. Dalam kasus WildFly Swarm uberjars, ini adalah file .jar tunggal yang berisi aplikasi Anda, bagian-bagian dari WildFly yang diperlukan untuk mendukungnya, repositori dependensi Maven internal, ditambah shim untuk mem-bootstrap semuanya. Lihat ini

Rasheed
sumber
0

Nama-nama yang berbeda hanyalah cara untuk mengemas aplikasi java.

Kurus - Berisi HANYA bit yang Anda ketik dalam editor kode Anda, dan TIDAK ADA yang lain.

Thin - Berisi semua hal di atas PLUS ketergantungan langsung aplikasi Anda (driver db, perpustakaan utilitas, dll).

Hollow - Kebalikan dari Thin - Berisi hanya bit yang diperlukan untuk menjalankan aplikasi Anda tetapi TIDAK mengandung aplikasi itu sendiri. Pada dasarnya "server aplikasi" yang telah dikemas sebelumnya yang nantinya dapat Anda gunakan, dengan gaya yang sama dengan server aplikasi Java EE tradisional, tetapi dengan perbedaan penting.

Fat / Uber - Berisi bit yang Anda tulis sendiri PLUS ditambah dependensi langsung aplikasi Anda PLUS bit yang diperlukan untuk menjalankan aplikasi “sendiri”.

Sumber: Artikel dari Dzone

Representasi visual dari tipe JAR

Diposting ulang dari: https://stackoverflow.com/a/57592130/9470346

Mark Han
sumber