2011-07-21 17 views
0

私はライブラリとしてdcm4cheを持つ古いJavaアプリケーションをmantainingしています。 dcm4cheライブラリは単なるjarファイルではありません。これは、jarファイルと、いくつかのプロパティファイルとクラスを持つほかのフォルダとを異なるフォルダに含むフォルダです。私はWindowsXPとJava 1.6を使用しています。jarファイル内のフォルダをクラスパスに入れる方法は?

set CLASSPATH=.;%PROJ_HOME%\classes;^ 
%THIRDPARTY_HOME%\dcm4che;^ 
%THIRDPARTY_HOME%\dcm4che\classes;^ 
%THIRDPARTY_HOME%\dcm4che\resources;^ 

は今、私は簡単にするために1つのjarファイルにそれらのすべてを配置しよう:私たちは私たちのアプリケーションを実行すると

、我々はこのような何かをすることによって、クラスパスにこれらのフォルダ、jarファイルを配置する必要がありますソース管理。 だから私は、次の内容のmanifest.txtファイルを作成します。その後、私はjarファイルを実行してdcm4che.jarを作成

Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar 

を:

jar -cfm dcm4che.jar manifest.txt * 

dcm4che.jarが作成されます。 Iすべてのコンテンツを抽出して、結果を確認し、マニフェストファイルをチェックして、私のクラスパスがあります:

Manifest-Version: 1.0 
Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar 
Created-By: 1.6.0_25 (Sun Microsystems Inc.) 

その後、私は新しい生成dcm4che.jarを指し、それらの古いエントリを削除するには、アプリケーションのクラスパスを変更します。

私が実行すると、NoClassDefFoundErrorが返されます。しかし、そのクラスは新しい作成されたjarファイル内のclassesフォルダの下にあります。

私に何かが不足していますか?

答えて

0

Javaはjarファイルのjarファイルをサポートしていません。したがって、最も簡単な方法は、このファイルを展開し、すべてのコンテンツをクラスパスに追加することです。私はあなたが簡単にスクリプトを使ってこれを行うことができると思います。とにかく、アプリケーションを実行するスクリプトはありますか?そのため、このファイルを一時ディレクトリまたはユーザのホームディレクトリに展開する行をいくつか追加してください。

これをしたくない場合や、他の理由で禁止されている場合は、ネストしたjarからcliessesをロードする独自のクラスローダーを実装する必要があります。それはそれほど難しいことではありませんが、いくつかの努力が必要です。あなたはジャカルタのVFSを使うことができます。実装を簡素化します。

しかし、私はあなたに最初の方法をお勧めします。

+0

あなたは今、私はそう思っていません。これを確認してください:http://download.oracle.com/javase/tutorial/deployment/jar/index.html – 5YrsLaterDBA

0

ONE-JARを使用して、クラスファイルとjarファイルを最終実行可能ファイルにパッケージ化することができます。

0

jarファイルは、基本的にzipファイルです。

zipファイルを読み取り専用ドライブまたはDVDとしてマウントするためのさまざまなユーティリティがあります。

同様に、isoイメージをcdまたはdvdとしてマウントするユーティリティもあります。私はそれらが非常に役に立つので、それらに中毒です。特にソフトウェアがDVDを読むことを強く望んでいて、同時に実行したいソフトウェアがいくつかあり、DVD/CDドライブは1つしかありません。

ROMドライブとしてマウントされると、うーん...それ以上のことは言うまでもありません。

関連する問題