导入自定义SQLite-JavaFX Jar包遇java.lang.module.ResolutionException错误求助
解决JavaFX与自定义SQLite封装Jar的拆分包冲突问题
问题根源
你的SQLite封装Jar包错误地将JavaFX的javafx.concurrent包打包进了自身文件中,导致与官方JavaFX模块(javafx.graphics)的同名包产生冲突,触发模块系统的拆分包错误。
方案1:修正SQLite项目的打包配置(根本解决)
SQLite项目作为依赖JavaFX的模块,打包时只应包含自身代码,不应将JavaFX依赖类一并打包。针对Maven项目,调整打包插件配置:
普通Maven Jar插件配置
在SQLite项目的pom.xml中,限制maven-jar-plugin仅打包自身源码:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <includes> <include>**/your/actual/package/**</include> <!-- 替换为你自己的源码包路径 --> </includes> </configuration> </plugin> </plugins> </build>
JavaFX Maven插件配置
如果使用javafx-maven-plugin打包,确保使用jar目标而非fatJar(后者会将所有依赖打包进Jar):
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <configuration> <mainClass>your.main.class.path</mainClass> <!-- 若为可运行Jar,填写主类路径 --> </configuration> <executions> <execution> <id>default-cli</id> <goals> <goal>jar</goal> <!-- 使用jar目标生成仅含自身代码的Jar --> </goals> </execution> </executions> </plugin>
重新打包后,SQLite Jar将不再包含JavaFX的包,新项目引入后即可解决冲突。
方案2:新项目临时绕过冲突(Workaround)
若暂时无法重新打包SQLite Jar,可通过JVM启动参数强制合并冲突包:
在IntelliJ的运行配置中,添加VM参数:
--patch-module javafx.graphics=path/to/your/sqlite.jar
该参数会告知模块系统,将SQLite Jar中的javafx.concurrent包合并到官方javafx.graphics模块中,避免冲突。
同时确保新项目的module-info.java依赖声明正确:
module your.new.project { requires javafx.controls; requires javafx.graphics; requires xx.xxxx.sqlite; }
额外排查点
- 检查SQLite项目是否误将JavaFX源码复制到了自身项目目录中,导致打包时包含了这些类。
- 若SQLite Jar是带依赖的可运行FatJar,必须改为仅含自身代码的普通Jar,否则必然与新项目的JavaFX依赖产生冲突。
内容的提问来源于stack exchange,提问作者Stefan325
相关产品推荐
相关产品推荐

