2011-07-08 14 views
0

Javaプロジェクトの一部をjarファイルにエクスポートし、メインクラスを実行するために必要なクラスファイルだけをエクスポートしたいとします。このプロジェクトには、類似しているが同一ではない依存関係を持つ他のメインクラスが含まれています。優雅さのために「EclipseでJARに書き出す」はjavacほどスマートにできますか?

mkdir temp 
cd temp 
javac -sourcepath "../" -d . ../MAINCLASS_A.java 
jar cmf MAINCLASS_A.manifest ../MAINCLASS_A.jar * 

、より簡単に他のユーザーと共有するために、私は、Eclipseの代わりに、このカスタムスクリプトから直接それを実行したい:私はこのように、それを達成するためのカスタムスクリプトを実行することができます。ただし、I Export to JARファイルまたはRunnable JARファイルには、プロジェクト内のすべてのクラスファイルが含まれます。特定のファイルを除外するための手動フィルタを設定できることは知っていますが、スマートな選択肢があるはずです。メインクラスが実際に依存するクラスファイルのみを含むようにEclipseを設定するにはどうしたらよいですか?

+0

Eclipseのエクスポートユーティリティには、どのファイルをjarファイルに保存するかを決めるオプションがあります。あなたはそれを試しましたか? – Logan

答えて

2

私は何がやりたいことは一般的なケースでは不可能だと思います。はい、理論的にはjavacはクラス間のすべての依存関係を見つけ出すことができます。しかし、これらの依存関係がプロジェクト内でハードコードされている場合、つまり直接的または間接的に動的クラスの読み込みと反映を使用しない場合にのみ正しいです。

実際のアプリケーションでは、通常、さまざまなサードパーティのライブラリやフレームワークなどが使用されます。したがって、独自のコードClass.forName()で一言も言わない場合でも動的クラスローディングが使用されることがあります。このような種類の最適化が必要な場合は、カスタムjarをビルドするカスタムスクリプトを作成する必要があると思います。あなたがそれを必要としているという事実は、あなたのプロジェクトが正しく構成されていないというヒントを与えるでしょう。おそらくプロジェクトを2つ以上に分割する必要があります。それぞれには依存関係のみが含まれていなければなりません。この場合、組み込みのEclipse関数を使用してjarファイルをパッケージ化することができます。

0

これはできません。メインクラスが依存するすべてのクラスは、実行時まで認識されません。

と言って、Class.forName("com.foo.Bar")を使用してクラスを読み込んでいます。この場合、メインクラス内のcom.foo.Barへの唯一の参照は文字列リテラルであり、javacまたはjarによってロードされません。

このように、手動フィルタを設定し、.jardescファイルを保存し、それをスクリプトとして使用して、後で同様のJarファイルを作成することができます。

これは、あなたに頭のスタートを与えるはずです。

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-33.htm

関連する問題