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

IntelliJ构建JavaFX18 Maven可执行JAR遇配置及图标解析错误求助

问题根源分析
  1. 图标依赖缺失/损坏:错误栈最终指向Cannot resolve 'win10-document',说明Kordamp Ikonli的Windows 10图标库未正确引入,或是你手动删除签名文件时误删了该库的必要资源。
  2. JavaFX模块加载违规:警告Unsupported JavaFX configuration: classes were loaded from 'unnamed module'表明你将JavaFX类打包进了未命名模块,违背JavaFX模块化设计,间接引发FXML加载异常。
  3. 手动打包流程漏洞:手动移除Maven依赖、添加本地SDK的操作绕开了Maven的依赖管理机制,极易出现依赖遗漏、版本不匹配、资源丢失等问题。
解决方案

步骤1:恢复Maven依赖管理

撤销IntelliJ中移除Maven库、添加本地JavaFX SDK的操作,让项目重新通过Maven管理所有依赖。在pom.xml中确保包含JavaFX和Ikonli的正确依赖:

<dependencies>
    <!-- JavaFX核心依赖 -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>18.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>18.0.2</version>
    </dependency>
    <!-- Ikonli Windows 10图标依赖 -->
    <dependency>
        <groupId>org.kordamp.ikonli</groupId>
        <artifactId>ikonli-win10-pack</artifactId>
        <version>12.3.1</version> <!-- 使用与项目匹配的版本 -->
    </dependency>
    <dependency>
        <groupId>org.kordamp.ikonli</groupId>
        <artifactId>ikonli-javafx</artifactId>
        <version>12.3.1</version>
    </dependency>
    <!-- 其他项目依赖 -->
</dependencies>

步骤2:使用Maven插件正确打包

方案A:构建模块化原生可执行包(推荐)

使用javafx-maven-plugin自动处理JavaFX模块和依赖,生成无需额外Java环境的可执行文件:

<build>
    <plugins>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version>
            <configuration>
                <mainClass>你的主类全路径(如view.GUI)</mainClass>
                <modules>
                    <module>javafx.controls</module>
                    <module>javafx.fxml</module>
                </modules>
            </configuration>
            <executions>
                <execution>
                    <id>native-image</id>
                    <phase>package</phase>
                    <goals>
                        <goal>native-image</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行打包命令:

mvn clean package

生成的原生可执行文件位于target目录。

方案B:构建Fat Jar(单一JAR场景)

使用maven-shade-plugin处理签名冲突和模块属性,生成可直接运行的Fat Jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- 指定主类 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>你的主类全路径</mainClass>
                            </transformer>
                            <!-- 处理模块信息,消除未命名模块警告 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ModuleResourceTransformer"/>
                        </transformers>
                        <!-- 自动排除冲突签名文件,无需手动删除 -->
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行打包命令:

mvn clean package

运行生成的Jar:

java -jar 你的Jar文件名.jar

步骤3:验证FXML图标配置

确保FXML中win10-document的引用语法正确,示例:

<FontIcon iconLiteral="win10-document" size="24"/>

额外注意事项

  • 所有依赖均通过pom.xml维护,禁止手动修改Maven管理的本地库,避免版本冲突和资源丢失。
  • 若项目使用模块化(含module-info.java),需在其中声明依赖:
module 你的模块名 {
    requires javafx.controls;
    requires javafx.fxml;
    requires org.kordamp.ikonli.javafx;
    requires org.kordamp.ikonli.win10;
    opens view to javafx.fxml; // FXML所在包需开放给FXML加载器
}

内容的提问来源于stack exchange,提问作者Thend

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:10:35