You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:13:10