我有一个Java项目,它使用一个小的SQLite数据库。
现在我想创建一个可执行jar文件,里面有数据库文件和驱动程序(sqlitejdbc-v056),只有一个包含所有包的文件。
我的包结构如下所示:
Bank
|
|
+---src
| ...
|
+---bin
| ...
|
+---data
| bank_database.db
|
+---img
| ajax-refresh-icon.gif
|
+---doc
| Datenbankschema.uxf
|
\---resources
sqlitejdbc-v056.jar
我使用这个小型Java类访问数据库:
package model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBHandle {
Connection conn;
public DBHandle() throws Exception {
Class.forName("org.sqlite.JDBC");
}
public Connection openConnection() throws SQLException {
conn = DriverManager.getConnection("jdbc:sqlite:data\\bank_database.db");
return conn;
}
public void closeConnection() throws SQLException {
if (!conn.isClosed()) {
conn.close();
}
}
}
如果我使用Eclipse导出管理器将所有这些内容打包到jar中并尝试执行它,则会为JDBC驱动程序抛出ClassNotFoundException
。
如何解决此问题?
甚至可以将资源修改为关于数据库的jar吗?
答案 0 :(得分:3)
AFAIK你不能在没有太多麻烦的情况下修改jar内的资源(基本上它是一个zip,因此它应该是可能的,但是JVM可能存在文件锁等。)。
此外,你不能把一个罐子放到另一个罐子里。但是,如果需要,可以解压缩驱动程序jar并将内容包含在jar中。 Maven程序集插件的目标是执行此操作:jar-with-dependencies
。
答案 1 :(得分:1)
要解决您的ClassNotFoundException
,您需要将sqlite jar添加到类路径
请参阅:http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html
答案 2 :(得分:0)
我的偏好是使用一个名为jar的实用程序。您可以使用从ant或maven中调用它,我将它用于工作和我的个人项目。我有一篇不错的博客文章解释了如何使用它:Building Self Contained Executable Jars 2 ways