2011-03-24 7 views
3

私はすべての一般的なポストでのサイトを通じて見えたが、私の質問は若干異なりますのJavaパッケージ/ビル共通テクニックJARファイル具体的に

として、他の多くのjarファイルを持っている簡単なJavaアプリケーションを梱包するためのベストプラクティスは何ですか依存関係?

たとえば、メインにfoo.javaがあり、foo1.java、foo2.javaがfoo.javaからアクセスされています。そして、私はlog4j.jar、mysql.jarをEclipseビルドパスに使用しています。

今私はそれを構築するためにうまく動作するantを使用しています。そして私がしているのは、すべてのクラスパスとlog4j情報を参照するシンプルな.shスクリプトを書くことです。しかし、これは私がそれらのすべての瓶を与える必要があり、彼らは正しい場所にいなければならないことを意味します。私は "java -jar foo.jar"と言うことができ、それを他のファイルを転送しなくてもどんなマシンでも動作させたいと思っています。

おそらく、.jarは最適な方法ではありません。クラスパスとすべてをセットアップする方法を知らない人に1つのファイルを渡して、それを実行できるようにしたいだけです。

また、私はベストプラクティスが何であるか不思議です。あなたは通常、誰かに瓶を与え、それらにすべての依存関係の瓶を与え、それをクラスパスに置くように伝えますか?

何とか.rpmを作成しますか?

私はMAVENに詳しくはありませんが、それが最良の方法であれば、私はチュートリアルを行います。今は私がアリを使用しています。

答えて

2

私は個人的に、このような単一のjarファイルにすべての依存関係をダンプするのが好きではありません。これはバイナリディストリビューションを見ている人が、プログラムが本当に依存しているものを理解するのを困難にします。

私が好むのは、自分のjarとそのすべての依存関係を持つlibディレクトリを作成することです。 manifest.mfにClass-Path:のクラスパスを指定します。マニフェストにMain-Class:というメインクラスを指定します。次に、java -jar my.jarを使用してアプリケーションを実行します。クラスとそのすべての依存関係をzipまたはtarにまとめるだけで済みます。

Mavenには、マニフェストの作成を自動化するタスクと、アーカイブの作成を自動化するタスクがあります。しかし、単一の成果物とほとんど変更されない第三者libsを持つ単純なプロジェクトでは、antスクリプトで簡単に構築できます。

+0

恐ろしい。さて、私は3rdPartyと呼ばれるディレクトリを持っています。クラスパスを含むマニフェストファイルを作成し、それらのすべてのjarファイルと新しいjarファイルを圧縮すると、誰かにそのファイルを解凍できるようになりますそれはクール。 – chantheman

+0

正しいですが、私は通常、プログラムを実行するためのシェル/バッチスクリプトを追加しますが、それは主に伝統です。 -jarを使うと、文字通り、私が上記のコマンドを必要とするだけです。 –

+0

参考:もしあなたが一緒に瓶を洗うつもりなら、maven-shade-pluginが必要です。 –

0

JarJarのようなツールを使用すると、すべての依存関係を1つのJARファイルに自動的にバンドルすることができるため、ユーザーは1つのファイルしか必要とせず、java -jar foo.jarを実行(またはダブルクリック)できます。

+1

これは本当に名前のために-1に値します。 JarJar Links ... – digitaljoel

+0

私はメッセンジャーを撃っていません。 Philippがそのプロジェクトの一部でない限り。あなたが撮影を始める前に、途中で止まるまで待ってください。 :) – JasonMArcher

+0

いいえ、私はそれらと関係がないので、撮影しないでください:-) –

2

あなたは、あなたは簡単なを使用してアプリケーションを起動することができ、そのような

などのツールを使用して、単一のjarファイルに複数のjar-ファイルをマージすることができますjar -jar yourApplication.jar

OneJarのWebページから:

ワンJARとは何ですか?

One-JARを使用すると、Javaアプリケーションとその依存関係Jarを1つの実行可能なJarファイルにパッケージ化できます。

JarJarとOneJarの両方には、配布に含まれるAntとの統合のためのAntタスクがあります。


また、WebStartを使用することもできます。このようにして、すべての依存関係が自動的にダウンロードされ、新しいバージョンを展開することは簡単です。しかし、最初の実行でWebアクセスが必要です。

+0

クール。ありがとう。しかし、誰かにあなたのアプリケーションを提供する限り、瓶は最高の方法ですか? – chantheman

+0

はい。実行可能なjarまたはWebスタートリンクのいずれか。 – aioobe

関連する問題