JavaFX项目中手动生成module-info.class并集成Maven的方法,解决zxing库jlink报错及寻找替代QR码生成库
JavaFX项目中手动生成module-info.class并集成Maven的方法,解决zxing库jlink报错及寻找替代QR码生成库
嗨,我来帮你搞定这个JavaFX项目里的棘手问题~你遇到的jlink报错是因为jlink只支持显式模块,没有module-info.class的自动模块没法被它处理,下面我一步步给你讲怎么处理,还有合适的替代库推荐。
一、给项目和zxing生成module-info并适配Maven
手动注入工具容易出现“无法读取jar内容”的错误,更可靠的方式是用Maven的Moditect插件来给zxing添加模块信息,同时给你自己的项目创建module-info.java:
1. 给你的JavaFX项目创建module-info.java
在src/main/java目录下新建module-info.java,内容示例如下(根据你的实际包名调整):
module your.project.module.name { // 依赖zxing模块(后面会用插件生成这个模块) requires com.google.zxing; requires com.google.zxing.javase; // 暴露你的项目包给外部(如果需要的话) exports com.your.project.package; // 允许JavaFX反射访问你的FXML相关包(如果用FXML的话) opens com.your.project.fxml.package to javafx.fxml; // 声明依赖JavaFX模块 requires javafx.controls; requires javafx.fxml; }
2. 用Moditect插件给zxing添加module-info
在你的pom.xml中加入Moditect插件配置,它会在打包阶段自动给zxing的core和javase jar添加模块信息:
<plugin> <groupId>org.moditect</groupId> <artifactId>moditect-maven-plugin</artifactId> <version>1.0.0.Final</version> <executions> <execution> <id>add-module-info-to-zxing</id> <phase>package</phase> <goals> <goal>add-module-info</goal> </goals> <configuration> <modules> <module> <moduleInfo> module com.google.zxing { exports com.google.zxing; exports com.google.zxing.qrcode; requires java.base; } </moduleInfo> <artifact> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.5.1</version> </artifact> </module> <module> <moduleInfo> module com.google.zxing.javase { exports com.google.zxing.client.j2se; requires com.google.zxing; requires java.desktop; requires java.base; } </moduleInfo> <artifact> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.5.1</version> </artifact> </module> </modules> </configuration> </execution> </executions> </plugin>
3. 配置Maven编译插件确保模块编译
在pom.xml的maven-compiler-plugin中指定Java版本和模块路径,保证模块能正常编译:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>17</release> <!-- 对应你使用的JavaFX版本,比如17是LTS版本 --> <modulePath>${project.build.directory}/modules</modulePath> </configuration> </plugin>
完成这些配置后,执行mvn clean package,Maven会自动处理zxing的模块信息,生成的jar就可以被jlink使用了。
二、自带module-info的QR码生成替代库
如果你不想折腾zxing的模块转换,这里有几个原生支持模块化的QR码生成库:
- ZXing-CP:这是zxing的官方兼容分支,已经内置了
module-info.class,API和原版完全一致,直接替换依赖就能用,不需要任何额外配置。 - QRGen:基于zxing的封装库,本身是模块化的,API更简洁,支持一行代码生成QR码图片,非常适合JavaFX项目快速集成。
- JavaQRCode:轻量级的原生模块化QR码库,体积小,API简单,适合对包大小有要求的项目。
备注:内容来源于stack exchange,提问作者Dharun
相关产品推荐
相关产品推荐

