Uber jarとは何ですか?


251

私はMavenのドキュメントを読んでいて、「uber-jar」という名前に出くわしました。

uber-jarの意味とその機能/利点は何ですか?


14
「uber jar」または「super jar」の別の用語は「fat jar」です。stackoverflow.com/questions/19150811/…を参照してください。
erwaman 2013年

「onejar」または「one-jar」と呼ばれることもときどきあります。
Jeen Broekstra 16

回答:


357

Überaboveor のドイツ語の単語ですover(実際には英語と同じoverです)。

したがって、このコンテキストでは、uber-jarは「over-jar」であり、単純なJAR (a)から1レベル上にあり、パッケージそのすべての依存関係の両方を1つのJARファイルに含むものとして定義されます。この名前は、ウルトラオタク、スーパーマン、ハイパースペース、メタデータと同じ「安定版」に由来すると考えられます。これらはすべて、「通常を超えて」という類似の意味を持っています。

利点は、uber-jarに実際は依存関係ないため、uber-jarを配布でき、依存関係が宛先にインストールされているかどうかをまったく気にしないことです。

uber-jar内の独自のもののすべての依存関係、そのuber-jar内にあります。これらの依存関係のすべての依存関係も同様です。等々。


(a)おそらく、JARが何であるかをJava開発者に説明する必要はありませんが、完全にするために含めます。これはJavaアーカイブであり、基本的には1つのファイルであり、通常、関連するメタデータとリソースとともに多数のJavaクラスファイルが含まれています。


奇妙なことに...私はドイツ人で、もちろん「ユーバー」という言葉とその意味を知っています。しかし、なぜここでMavenのコンテキストで使用されるのでしょうか。この場合、1つ以上のものが集められ、生成されたjarを介してアクセス可能であることを意味します。残念なことに、このヒントは私のmavenの問題を解決しませんでした;-)
Bjoern

7
ところで、überそしてoverまた、これらの単語のペアで観察することができる古いゲルマンの系統的ボーカルシフトの結果である:geben/giveleben/livehaben/haveheben/heaveと、より多くの。
ビジクロップ2015年

非常に賢い説明:リンクの
Veniamin

人々を教育しようとすることについてどれほどの悲しみを得たかを考えると、私は、いくつかが不平を言い続けているものを単に取り除くことに決めました。私はまだドイツ語のコンテキストでuberを定義していますが、(やや
冗長な

58

ubar jarは、ファットjar、つまり依存関係のあるjarとも呼ばれます。
uber jarを作成するには、3つの一般的な方法があります。

  1. 陰影なし:すべてのJARファイルを解凍し、単一のJARに再パックします。Javaのデフォルトのクラスローダーで動作します。ツールmaven-assembly-plugin
  2. シェーディング:シェーディングなしと同じですが、すべての依存関係のすべてのパッケージの名前を変更(つまり、「シェーディング」)します。Javaのデフォルトのクラスローダーで動作します。依存関係のバージョンの衝突(すべてではない)の一部を回避します。ツールmaven-shade-plugin
  3. JARのJAR:最終的なJARファイルには、他のJARファイルが埋め込まれています。依存バージョンの衝突を回避します。すべてのリソースファイルが保持されます。ツール:Eclipse JARファイルエクスポーター

多くのための


57

Paxdiabloの定義は本当に良いです。

さらに、本当にソフトウェアを配布したいが顧客が自分で依存関係をダウンロードする必要がないようにしたい場合は、uber-jarの配信が時々非常に興味深いことを考慮してください。欠点として、独自のポリシーで一部のライブラリの使用が許可されていない場合、または一部の追加コンポーネント(slf4j、システム準拠のライブラリ、arch specialiezライブラリなど)をバインドする必要がある場合は、おそらくそれらの問題が増加します。 。

あなたはそれを行うことができます:

よりクリーンなソリューションは、ライブラリを個別に提供することです。maven-shade-pluginには、そのための記述子が事前設定されています。これは(mavenとそのプラグインを使用して)実行するのがそれほど難しくありません。

最後に、本当に良い解決策は、OSGIバンドルを使用することです。それに関するたくさんの良いチュートリアルがあります:)

詳細な構成については、次のトピックをお読みください。


4

自己完結型の実行可能なJavaアーカイブ。WildFly Swarm uberjarの場合、これは、アプリケーション、それをサポートするために必要なWildFlyの部分、依存関係の内部Mavenリポジトリ、およびすべてをブートストラップするシムを含む単一の.jarファイルです。これを見て


0

異なる名前は、Javaアプリをパッケージ化する方法にすぎません。

スキニー –コードエディターに文字どおりに入力するビットのみが含まれ、その他は含まれません。

Thin –上記のすべてに加えて、アプリのアプリの直接依存関係(dbドライバー、ユーティリティライブラリなど)が含まれます。

Hollow – Thinの逆–アプリの実行に必要なビットのみが含まれ、アプリ自体は含まれません。基本的に、事前にパッケージ化された「アプリサーバー」で、後でアプリをデプロイできます。従来のJava EEアプリサーバーと同じスタイルですが、重要な違いがあります。

脂肪/ユーバー -あなたは文字通り自分の書き込みビットが含まPLUSのアプリの直接の依存関係PLUS「独自に」あなたのアプリケーションを実行するのに必要なビットを。

出典:Dzoneの記事

JARタイプの視覚的表現

再投稿:https ://stackoverflow.com/a/57592130/9470346

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.