[英]Sqlite database ..java.lang.ClassNotFoundException:org.sqlite.jdbc
[英]Java SQLite org.sqlite.JDBC classpath broken?
在将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)
我正在使用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
当使用-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.Mall作为班级(而不是拉扯我的头发)
在总共花费了6多个小时,并多次尝试使用classpath和诸如此类的东西来运行“便携式” jar包失败之后,尝试了OneJar和jarjar都无效(最终导致Class file too large!
)之后,我决定编写有问题的代码在PHP中。
在我看来,它比Java更可移植。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.