2011-07-05 15 views
0

現在、すべてのライブラリを含むJarを作成しようとしています。私行っている、私はこのようなフォルダを作成している:私は持っているJava - Jarがインクルードされたライブラリとメインクラスを見つけられませんでした

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.2 
Class-Path: lib\commons-pool-1.5.6.jar lib\jedis-2.0.0.jar lib\mongo-2.6.3.jar 
Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.) 
Main-Class: eancopy.process 

eancopy (which contain all my classes) 
lib (containing all my libraries : mongo, jedis...) 
META-INF/MANIFEST.MF 

を私のメインクラスは

私のマニフェストはこのようなものです(パッケージeancopy内)process命名されます

jar cvmf META-INF/MANIFEST.MF EANcopy.jar eancopy/*.class lib/*.jar 

私の問題:execuティンjava -jar EANcopy.jarによってJAR、それは私がJARを生成している場所で実行されたとき、それは動作しますが、別の場所で私がメッセージを持っている:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/DBObject 
Caused by: java.lang.ClassNotFoundException: com.mongodb.DBObject 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
Could not find the main class: eancopy.process. Program will exit. 

任意のアイデア?おかげ

+2

回答を受け取る方法をご存知ですか? – abalogh

答えて

0

は、この例外は、あなたの問題の原因を示しています。COM/MongoDBの/ DBObjectを

あなたはあなたの中にこれらのLIBS lib\commons-pool-1.5.6.jar lib\jedis-2.0.0.jar lib\mongo-2.6.3.jarを指定していない:スレッド "メイン" java.lang.NoClassDefFoundErrorの中

例外環境変数であるCLASSPATHであるため、他の場所で実行すると失敗するのはなぜですか。

+0

これはMANIFEST - > Class-Pathで互換性のために指定されていますが、CLASSPATH環境変数を使用しないほうがいいです – kozher

+0

はい、これらのjarファイルはすべて 'EANCopy.jar'に含まれていますか? –

0

クラスパス属性は、jarファイルに含まれているライブラリではなく、jarファイルと同じ場所にあるライブラリのみを検索します。 このthreadによれば、特殊なクラスローダを使用するか、またはjarファイル内のインクルードされたライブラリを分解するメソッドを使用する必要があります。

関連する問題