Java 带有sqlite驱动程序的Jar可执行文件
我编写了一个代码,它连接到我的Java 带有sqlite驱动程序的Jar可执行文件,java,sqlite,jar,Java,Sqlite,Jar,我编写了一个代码,它连接到我的sqlite驱动程序,该驱动程序位于CLASSPATH中,并读取一些数据库文件。我想创建一个可执行文件,它可以在没有sqlite驱动程序的计算机上使用 如果我这样做: jar cvfe exec.jar main_class 使用运行时,我将获得“未找到类:org.sqlite.JDBC” java -jar exec.jar 我应该怎么做才能使可执行文件工作 编辑: 我不知道这是否有什么区别,但这是我使用的JDBC驱动程序: 这是文件: C:\Windows\
sqlite
驱动程序,该驱动程序位于CLASSPATH
中,并读取一些数据库文件。我想创建一个可执行文件,它可以在没有sqlite
驱动程序的计算机上使用
如果我这样做:
jar cvfe exec.jar main_class
使用运行时,我将获得“未找到类:org.sqlite.JDBC”
java -jar exec.jar
我应该怎么做才能使可执行文件工作
编辑:
我不知道这是否有什么区别,但这是我使用的JDBC驱动程序:
这是文件:
C:\Windows\System32>jar /?
Illegal option: /
Usage: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
所以我认为你需要的命令是:
jar cvfe exec.jar main_class main_class
您需要将库包含在JAR中。也许您不知道这一点,但JAR文件只是ZIP文件,所以您可以轻松地更改其内容。这里有一些关于如何做的快速说明。假设您的JAR文件名为
exec.JAR
,并且要包含的库的JAR(下载的JAR)是driver.JAR
exec.jar
更改为exec.zip
exec.zip的所有内容解压缩到文件夹exec/
driver.jar
更改为driver.zip
driver.zip的所有内容解压缩到文件夹driver/
driver/
的内容复制到exec/
中,但不要复制META-INF
文件夹。如果弹出窗口询问是否可以合并文件夹,请单击“是”exec/
中的所有文件压缩到exec.zip中
exec.zip
重命名为exec.jar
(替换原来的)您可以使用此方法在JAR中包含任何java库。您是否使用maven/gradle构建JAR?我不能从命令行执行此操作吗?这应该很容易,但我找不到任何你应该在罐子里包含驱动程序的地方。你在这么做吗?不。我不知道怎么做。但是我如何让SQLite与可执行文件一起工作呢?我想你只需要向上面的命令传递一个-classpath arg,该命令包含SQLite.jar文件的位置。当然,这是一个问题,因为您没有提取可执行文件.jar,因此无法加载资源。有一种方法可以处理它,只是不知道确切的方法。有一个Maven插件可以做到这一点。只有几个问题。驱动程序只有一个jar文件。这就是org/sqlite文件夹中应该包含的内容吗?还是必须提取driver.jar?我两个都做了,但是当我尝试使用最终的exec.jar文件时,它会说它已损坏。在里面,你会发现一个名为
org
的文件夹。在org
中,您将找到一个名为sqlite
的文件夹。将sqlite
的所有内容复制到您的exec.jar/org/sqlite
中。我更新了答案,希望能让答案更清楚。实际上,您所需要做的就是将库jar与您的jar合并。它现在可以工作了。腐败不是一个严重的问题。谢谢。如果我在编译后将org/sqlite添加到我的java目录中,并键入jar cvfe exec.jar main_class*.class org,也可以使用它