当前位置: 首页 > 知识库问答 >
问题:

独立jpackage生成的java应用程序为com生成ClassNotFoundException。mysql。cj。jdbc。驾驶员

常献
2023-03-14

我用jpackage构建了一个java应用程序。该应用程序在eclipseT中工作。jpackage的结果可以安装在windows上并启动。应用程序使用javafx ui。该应用程序基于Java 17和使用模块。到目前为止,一切顺利。应用程序应该写入MySQL数据库,然后问题就出现了。mysql-connector-java-8.0.27。jar不支持模块,因此不能像--module path下的其他jar那样声明。我使用了--java options-Dclasspath=C:\Users\home\mysql-connector-java-8.0.27。要克服的困难。在应用程序中。cfg文件条目:java options=-Dclasspath=C:\Users\home\mysql-connector-java-8.0.27。生成jar。在ConnectDB类中,我使用conn=DriverManager。getConnection(DB\U JDBC\U CONNECT,connectionProps);这在eclipse中有效,但在jpackage生成的java应用程序中无效。所以我增加了类。forName(“com.mysql.cj.jdbc.Driver”),但这会引发ClassNotFoundException!你知道如何说服java应用程序研究mysql-connector-java-8.0.27吗。com的jar。mysql。cj。jdbc。驾驶员

共有1个答案

姜宏盛
2023-03-14

Jpackage现在按预期工作。以下是经验教训:

最终起作用的命令如下所示:

jpackage
--name MyApp
--type msi 
--win-console 
--input ..\lib 
--dest \temp\instMyApp 
--module-path %JAVA_HOME%\jmods;.\myApp.ui.jar;.\myApp.db.jar  
--add-modules myApp.ui,myApp.db,java.logging 
--jlink-options --bind-services 
--module myApp.ui/myApp.ui.EntryForm

可能可以省略或扩展--jlink选项行。尚未测试。

最大的区别是线条

 --input ..\lib

对于--type,只能给出包含非模块化jar的目录。在我声明为

--input ..\lib\mysql-connector-java-8.0.27.jar

这会在构建msi时抛出一个错误,告诉对象已经存在。

在我尝试通过以下方式声明类路径之前:

java-options=-Dclasspath=C:\Users\home\mysql-connector-java-8.0.27.jar

该声明可在MayApp中找到。cfg文件,但没有效果!

如图所示,使用jpackage命令(全部在一行上)将在MyApp中生成条目。cfg文件如下:

[Application]
app.mainmodule=myApp.greek.ui/myApp.ui.EntryForm
app.classpath=$APPDIR\mysql-connector-java-8.0.27.jar

[JavaOptions]
java-options=-Djpackage.app-version=1.0

附加说明:--win-控制台在启动MyA时打开控制台pp.exe.注意

--add-modules myApp.ui,myApp.db,java.logging

提到java的行。登录中。

具有

--java-options -Djava.util.logging.config.file=C:\temp\myApp.log

登录到文件应该是可能的。直到现在才工作。

在执行jpack命令之前,我在执行命令的同一目录中构建了两个模块(myApp.db和myApp.ui)的jar。最终可以省略jars的构建,只提供模块目录的路径。TBT!

...\lib目录只能包含非模块化jar,如所示的mysql连接器。其他jar,如H2-db-Engine,可以放置在同一目录中,以获得与MySQL更轻量级的版本。

我还尝试在MANIFEST. MF中声明类路径。显然可以省略。不考虑。

有乐趣!

 类似资料:
  • 伙计们。 我正在构建一个spring boot服务。现在,我将其设置为使用jooq查询本地MySQL实例。 但是,<代码>/gradlew build出现错误,无法加载类com。mysql。jdbc。驱动程序“”。 我遗漏了什么吗? 这是我的毕业剧本。

  • 我在Stack Overflow中见过很多解决方案,但没有一个对我有效。所以我得到了这个例外。我的pom。这里有xml代码 我还在tomcat/lib文件夹中添加了jar文件。但对我来说什么都不管用。

  • 我的Spring Boot项目正在尝试使用驱动程序连接MYSQL数据库。我已经导入了最新的mysql驱动程序和 我已经在文件中配置了数据库连接 MYSQL版本是8.0.26 Spring启动版本2.6.2 当用Intellij运行项目时,我得到一个错误 原因:org。springframework。豆。BeanInstationException:未能实例化[com.zaxxer.hikari.H

  • 在Expo的支持下,我们正在React Native中构建一个移动应用程序。过了一段时间,我们决定把世博会分离出来,利用世博会带来的其他本土利益。它同时支持和两种平台 我能够成功地将我们的应用程序与expo分离,使用这里提到的说明。我们有和文件夹,一切都很好。 现在,我们要从应用程序生成一个独立的签名APK。我指的是这些步骤。它确实产生了APK,但不知何故,它不工作后,安装在设备上。安装后,如果我

  • 我在java编程方面有一些问题。这是我第一次遇到java,所以请耐心等待,因为我可能会错过绝对的基础知识。无论如何,长话短说,我有数独要做,我遇到了一些问题。我需要随机数来制作数独板,或者更确切地说是它的值。 如果您不知道数独是关于什么的,则必须只有1-9的数字,并且它们不能在行列和3x3正方形中重复。板本身是9x9,因此可以分为9个3x3正方形。 主要问题是随机生成的值有时会使模式难以解决。因此

  • 我想用我的数据库配置glassfish。我创建jdbc ressource时是这样的: jndi名称:jdbc/MysqlDataSource 池名:MysqlConnPoll 我创建的连接池如下所示: 池名称:MysqlConnPoll 资源类型:java.sql.driver 驱动类名:com.mysql.jdbc.driver 在其他属性中 数据库名称:name_db 用户:root 密码: