Uber JAR, singkatnya, adalah JAR yang berisi segalanya.
Biasanya di Maven, kami mengandalkan manajemen ketergantungan. Artefak hanya berisi kelas / sumber daya itu sendiri. Maven akan bertanggung jawab untuk mengetahui semua artefak (JAR, dll) yang tergantung pada proyek saat proyek dibangun.
Uber-jar adalah sesuatu yang mengambil semua dependensi, dan mengekstrak konten dependensi dan menempatkannya dengan kelas / sumber daya dari proyek itu sendiri, dalam satu JAR besar. Dengan memiliki uber-jar seperti itu, mudah untuk dieksekusi, karena Anda hanya perlu satu JAR besar, bukan ton JAR kecil untuk menjalankan aplikasi Anda. Ini juga memudahkan distribusi dalam beberapa kasus.
Hanya catatan tambahan. Hindari menggunakan uber-jar sebagai ketergantungan Maven, karena merusak fitur resolusi ketergantungan Maven. Biasanya kami membuat tabung-uber hanya untuk artefak akhir untuk penyebaran aktual atau untuk distribusi manual, tetapi tidak untuk menempatkan ke repositori Maven.
Pembaruan: Saya baru saja menemukan bahwa saya belum menjawab satu bagian dari pertanyaan: "Apa gunanya mengubah nama paket dependensi?". Berikut adalah beberapa pembaruan singkat dan mudah-mudahan akan membantu orang yang memiliki pertanyaan serupa.
Membuat uber-jar untuk kemudahan penempatan adalah salah satu contoh penggunaan plugin teduh. Ada juga kasus penggunaan umum lainnya yang melibatkan penggantian nama paket.
Sebagai contoh, saya sedang mengembangkan Fooperpustakaan, yang tergantung pada versi tertentu (mis. 1.0) Barperpustakaan. Dengan asumsi saya tidak dapat menggunakan versi Barlib lainnya (karena perubahan API, atau masalah teknis lainnya, dll). Jika saya hanya menyatakan Bar:1.0sebagai Foodependensi dalam Maven, adalah mungkin untuk jatuh ke dalam masalah: Sebuah Quxproyek tergantung pada Foo, dan juga Bar:2.0(dan itu tidak dapat digunakan Bar:1.0karena Quxperlu menggunakan fitur baru di Bar:2.0). Inilah dilema: harus Quxdigunakan Bar:1.0( Quxkode mana yang tidak akan berfungsi) atau Bar:2.0( Fookode mana yang tidak akan berfungsi)?
Untuk mengatasi masalah ini, pengembang Foodapat memilih untuk menggunakan plugin teduh untuk mengubah nama penggunaannya Bar, sehingga semua kelas di Bar:1.0jar disematkan dalam Foojar, dan paket Barkelas tertanam diubah dari com.barmenjadi com.foo.bar. Dengan demikian, Quxdapat dengan aman bergantung pada Bar:2.0karena sekarang Footidak lagi tergantung pada Bar, dan menggunakan salinan "diubah" sendiri yang Barterletak di paket lain.