Java SQLite org.sqlite.JDBC类路径坏了吗?

时间:2014-06-08 23:26:34

标签: java sqlite jdbc sqlitejdbc

在使用带有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

2 个答案:

答案 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更便携。