在使用带有org.sqlite.JDBC
的JDBC sqlite时,我偶然发现了一个奇怪的错误
我的代码在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)
我正在使用java -classpath "sqlite-jdbc-3.7.2.jar" -jar Mall.jar"
和java -classpath "sqlite-jdbc4-3.8.2-SNAPSHOT.jar" -jar Mall.jar
运行它
两个版本与我的jar在同一目录中,我尝试了十几个不同的选项指定类路径,它的行为完全相同。我试过openjdk和oracle jdk。
我尝试在Ubuntu上重建它,更改ant .xmls,更改路径等等。
我不知道发生了什么事。请帮助。
以下是我的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
答案 0 :(得分: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
意味着我的包含main的类是mall.Mall
显示
商场/ Mall.class
所以我应该使用mall.Mall作为要运行的类(而不是拉我的头发)
答案 1 :(得分:0)
经过超过6个小时的总计,许多失败的尝试跑步&#34;便携式&#34;使用classpath和诸如此类的jar包,在尝试了OneJar和jarjar之后无济于事(最后得到Class file too large!
)我决定在PHP中编写令人讨厌的代码片段。
在我的案例中,事实证明它比Java更便携。