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

JavaFX17+JakartaEE10打包后无法登录,请求排查POM配置问题

问题排查与修复方案

针对你遇到的shaded.jar运行时loginAPI无响应的问题,从你的POM配置中可以看到几个关键问题,以下是具体修复点:

1. 错误地将Maven Shade插件作为依赖引入

你在<dependencies>中添加了maven-shade-plugin的依赖,这是完全错误的。插件应该仅在<build><plugins>中配置,不需要作为依赖引入。直接删除这个依赖项:

<!-- 移除这个错误的依赖 -->
<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.sonatype.sisu</groupId>
            <artifactId>sisu-inject-bean</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. Shade插件缺少Services资源合并转换器

Jersey客户端依赖SPI服务(如消息转换器、客户端提供者),这些服务定义在META-INF/services目录下的文件中。Shade打包时如果不合并这些文件,会导致运行时无法找到必要的服务实现,从而使API调用无响应。需要在Shade插件的transformers中添加ServicesResourceTransformer:

<transformers>
    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
        <mainClass>com.company.package.MainApp</mainClass> <!-- 统一启动类 -->
    </transformer>
    <!-- 添加这个转换器合并SPI服务文件 -->
    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>

3. JavaFX版本不一致

你的javafx-swing依赖版本是17.0.11,其他JavaFX依赖是17.0.1,版本不一致可能导致类加载冲突。统一所有JavaFX依赖的版本为17.0.11:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>17.0.11</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>17.0.11</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-graphics</artifactId>
    <version>17.0.11</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-media</artifactId>
    <version>17.0.11</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-swing</artifactId>
    <version>17.0.11</version>
</dependency>

4. 重复且不必要的JakartaEE依赖

作为桌面客户端应用,你不需要引入jakarta.jakartaee-api和jakarta.jakartaee-web-api这类服务器端API依赖,而且这两个依赖本身存在重复。保留仅客户端需要的Jersey和JAXB相关依赖即可,删除以下重复依赖:

<!-- 移除这些服务器端API依赖 -->
<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>10.0.0</version>
</dependency>
<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-web-api</artifactId>
    <version>10.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.el</groupId>
    <artifactId>jakarta.el-api</artifactId>
    <version>5.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
    <scope>provided</scope>
</dependency>

5. JAXB API缺少运行时实现

你只引入了jakarta.xml.bind-api,但没有对应的运行时实现,这会导致Jersey无法处理XML/JSON的序列化/反序列化(即使使用Gson,Jersey内部可能仍依赖JAXB)。添加GlassFish的JAXB运行时依赖:

<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>4.0.4</version>
</dependency>

6. 统一启动类配置

javafx-maven-plugin和shade插件中的mainClass不一致,统一设置为实际的启动类(比如com.company.package.MainApp):

<!-- javafx-maven-plugin中的配置 -->
<configuration>
    <mainClass>com.company.package.MainApp</mainClass>
</configuration>

<!-- shade插件中的配置 -->
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <mainClass>com.company.package.MainApp</mainClass>
</transformer>

修改后的完整POM示例

<dependencies>
    <!-- 统一版本的JavaFX依赖 -->
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>17.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>17.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>17.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>17.0.11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>17.0.11</version>
    </dependency>

    <!-- Jersey客户端依赖 -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>3.1.6</version>
    </dependency>
    <dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <!-- JAXB API + 运行时实现 -->
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>4.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>4.0.4</version>
    </dependency>

    <!-- Gson依赖 -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.2</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.8</version> <!-- 明确插件版本,替换原来的变量 -->
            <configuration>
                <mainClass>com.company.package.MainApp</mainClass>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>module-info.class</exclude>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.company.package.MainApp</mainClass>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>17</source>
                <target>17</target>
            </configuration>
        </plugin>
    </plugins>
</build>

额外建议

  • 运行shaded.jar时,建议通过命令行启动并查看输出:java -jar your-shaded.jar,这样能捕获到控制台的隐性异常信息,帮助进一步排查。
  • 如果JavaFX的native库仍有问题,可以考虑使用javafx-maven-plugin的jlink目标构建模块化的运行时镜像,这是JavaFX官方推荐的打包方式,比shade更稳定。

内容的提问来源于stack exchange,提问作者A.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:42:08