使用Gluonfx打包JavaFX应用时遇MySQL pt_BR资源包缺失错误
解决GluonFX打包JavaFX应用后MySQL驱动找不到pt_BR本地化资源的问题
问题场景
使用GluonFX将带有Maven依赖的JavaFX应用打包为单文件后,执行mvn gluonfx:nativerun启动应用,触发数据库连接操作时抛出以下错误:
[seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Can't find bundle for base name com.mysql.cj.LocalizedErrorMessages, locale pt_BR [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at com.mysql.cj.Messages.<clinit>(Messages.java:60) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] ... 64 more [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] Caused by: java.util.MissingResourceException: Can't find bundle for base name com.mysql.cj.LocalizedErrorMessages, locale pt_BR [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at java.base@17.0.9/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at java.base@17.0.9/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1683) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at java.base@17.0.9/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1586) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at java.base@17.0.9/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1549) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at java.base@17.0.9/java.util.ResourceBundle.getBundle(ResourceBundle.java:858) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] at com.mysql.cj.Messages.<clinit>(Messages.java:58) [seg. dez. 18 14:50:57 BRT 2023][INFO] [SUB] ... 64 more
经确认,LocalizedErrorMessages_pt_BR.properties并非mysql-connector-j原生提供的文件,修改<default-locale>或VM区域设置无法解决问题。
解决方案
方法1:强制MySQL驱动使用英文资源包
在JDBC连接URL中添加locale参数,强制驱动使用英文本地化资源,跳过对pt_BR资源的查找:
String url = "jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8&locale=en_US"; Connection conn = DriverManager.getConnection(url, username, password);
或者通过连接属性设置:
Properties props = new Properties(); props.setProperty("user", username); props.setProperty("password", password); props.setProperty("locale", "en_US"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db", props);
方法2:添加自定义pt_BR本地化资源文件
在项目的src/main/resources/com/mysql/cj目录下创建LocalizedErrorMessages_pt_BR.properties文件,可直接复制mysql-connector-j中LocalizedErrorMessages_en_US.properties的内容并修改为葡萄牙语(巴西)版本,或仅创建空文件(驱动会自动 fallback 到默认资源)。GluonFX打包时会自动将该文件包含到最终可执行文件中,解决资源缺失问题。
方法3:配置GluonFX Maven插件强制包含资源
在pom.xml的gluonfx-maven-plugin配置中,显式指定需要包含的资源目录,确保MySQL驱动的资源文件被正确打包:
<plugin> <groupId>com.gluonhq</groupId> <artifactId>gluonfx-maven-plugin</artifactId> <version>1.0.21</version> <!-- 使用最新稳定版本 --> <configuration> <mainClass>com.yourpackage.MainApplication</mainClass> <resources> <!-- 包含项目自身资源 --> <resource> <directory>${project.basedir}/src/main/resources</directory> </resource> <!-- 显式包含MySQL驱动的资源 --> <resource> <directory>${maven.dependency.com.mysql.mysql-connector-j.path}</directory> <includes> <include>**/*.properties</include> </includes> </resource> </resources> </configuration> </plugin>
版本注意事项
确保使用的mysql-connector-j版本为8.x系列(如8.0.30+),该版本对资源加载逻辑的兼容性更好,避免因版本差异导致的资源查找问题。
内容的提问来源于stack exchange,提问作者Carlos Eduardo
相关产品推荐
相关产品推荐

