0

私のコードで JDBC sqlite を使用しているときに奇妙なエラーが発生しorg.sqlite.JDBC 、Windows で正常にコンパイルおよび実行されました。しかし、Ubuntuに移動しようとすると、次のように表示され始めました:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:259)
        at mall.SQLiteJDBC.<init>(SQLiteJDBC.java:27)
        at mall.AllegroReader.<init>(AllegroReader.java:33)
        at mall.Mall.main(Mall.java:31)

私はjarと同じディレクトリにある両方のバージョンで実行してjava -classpath "sqlite-jdbc-3.7.2.jar" -jar Mall.jar"おり、java -classpath "sqlite-jdbc4-3.8.2-SNAPSHOT.jar" -jar Mall.jar クラスパスを指定してさまざまなオプションを試しましたが、まったく同じように動作します。openjdk と oracle jdk を試しました。Ubuntuで再構築、ant .xmlの変更、パスの変更などを試みました。

何が起こっているのかわかりません。助けてください。

私のdistディレクトリ内で何が起こるかは次のとおりです。

work1@workwork:/var/www/mall/dist$ ls
mall.db  Mall.jar  Mall.jar.old  sqlite-jdbc-3.8.4.3-SNAPSHOT.jar

work1@workwork:/var/www/mall/dist$ java -classpath "sqlite-jdbc-3.8.4.3-SNAPSHOT.jar:Mall.jar" Mall
Error: Could not find or load main class Mall
4

2 に答える 2

2

を使用する場合、クラスパスは無視されます-jar

jar に依存関係を含める (または少なくとも jar マニフェストがそれらを指すようにする) か、-classpath sqlite.jar:Mall.jar the.main.class.

エラー: メイン クラス Mall.main が見つからないか、読み込めませんでした。すべてのファイルがそこにあり、私のメインクラスはから来て、にコンパイルさMall.javaれるmallパッケージに含まれていますMall.jar

したがって、正しいコマンドラインは次のとおりです。

java -classpath "sqlite-jdbc-3.8.4.3-SNAPSHOT.jar:Mall.jar" mall.Mall

OPの所見

jarの使用でクラスを表示するにはjar tf Mall.jar-これからmall/Mall.class、メインを含むクラスがmall.Mall

それは示した

モール/Mall.class

したがって、実行するクラスとして mall.Mall を使用する必要がありました (髪を引っ張るのではなく)。

于 2014-06-09T10:05:14.617 に答える
0

クラスパスなどを使用して「ポータブル」jarパッケージを実行する試みに何度も失敗し、合計6時間以上費やした後、OneJarとjarjarを試して無駄になった後(最終的にはClass file too large!.

私の場合、Java よりも移植性が高いことがわかりました。

于 2014-06-09T11:23:20.323 に答える