web-dev-qa-db-ja.com

複数のジャーを1つのジャーにマージする

私のアプリケーションが機能するには、複数のjarが必要です。デスクトップアプリケーションなので、ユーザーにインストールの責任を負わせることはできません。したがって、ビルドスクリプトで、jarコンテンツをビルドディレクトリに解凍し、マニフェストファイルを削除し、ソフトウェアをコンパイルして、再度jarします。私の質問は、このプロセスに長期的な副作用がありますか?

12
Hamza Yerlikaya

過去には、奇妙な内容のJARがありました(com.ibmcom.IBMを含むDB2ドライバーのように、Windowsファイルシステムで解凍した後、これら2つのパッケージはマージされます)。

注意する必要がある唯一の問題は、複数のソースJARで同じ名前を持つ可能性のあるMETA-INF内の署名されたjarおよびその他のファイルです。

これらすべての問題の簡単な解決策は、 One-JAR を使用することです。最初に、複数のJARを解凍せずに1つにラップすることができます。そして、この答えを読んでください: リリースを1つのJARファイルにマージする最も簡単な方法

12
Aaron Digulla

より単純なソリューション(IMO)は、 Mavenのアセンブリプラグイン を使用しています。これは、 以前のQ&A でリンクされた別の質問への回答の1つにも記載されています。これは、ビルドツールとしてMaven(それ自体が推奨されるツール)を使用している場合に提供されます。

4
Ophir

もう1つの優れたオプションは ProGuard です。これは、コードをまた縮小および/または難読化できます。

2
Lawrence Dol

一部のjarファイルが署名されている場合は、解凍/再パックすると署名が失われます。

1
asalamon74

プライマリターゲットプラットフォームがWindowsデスクトップの場合は、アプリケーションのjarファイルからWindowsネイティブexeを生成することも検討できます。

1
swamy

エンドユーザーが複数のjar依存関係を持つプログラムを開始するための手間のかからない方法が必要な場合は、 Launch4j または Jsmooth (Launch4jが好きです)を確認することをお勧めします。どちらも、jarとJREを一緒にラップする実行可能ファイルを作成するプログラムであるため、エンドユーザーには他の実行可能ファイルと何ら変わりはありません。

1
James McMahon

さて、あなたはあなたのサードパーティの瓶のマニフェストを捨てているので、それはあなたに問題を引き起こす可能性があります。たとえば、「Sealed」属性を破棄することでセキュリティの問題を引き起こしている可能性があります。

CLASSPATHを正しく設定するアプリケーションを起動するための簡単なインストーラーとスクリプトを作成してみませんか?

0
Glen

One-JARがその役割を果たし、SpringやGuiceなどのフレームワークをサポートする新しいリリース(0.97)があり、ユーザーは現在One-JARアーカイブにパックしています。 http://one-jar.sourceforge.net

Ference Hechlerは、Eclipseエクスポートウィザードを使用してEclipse内でいくつかの素晴らしい作業も行いました。Eclipseの作業が成長したFatJar/One-JARで共同作業を行いました。アプローチとしては、それがどの程度うまく処理されるかはわかりませんが、お勧めできます。フレームワーク。

0
simontuffs