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

是否存在非取巧方式从胖JAR运行Jakarta Server Faces应用?

从JAR运行JSF+EJB应用的现代方案

1. 用Jakarta EE 9+的可执行Uber-JAR模式

现在Jakarta EE(原JEE)已经支持把整个应用连服务器运行时一起打包成可执行Uber-JAR,直接通过java -jar就能启动,所有资源都从类路径加载,完全匹配你想要的“把服务器当库用”的思路。

以Payara Micro为例:

  • 借助Maven的payara-micro-maven-plugin插件,配置uberJar构建目标,插件会自动把Payara Micro运行时和你的应用打包成单个JAR,所有类、页面、配置等资源都嵌入其中,运行时直接从类路径读取,完全不需要磁盘上的WAR文件。
  • 给你一个Maven配置片段参考:
    <plugin>
        <groupId>fish.payara.maven.plugins</groupId>
        <artifactId>payara-micro-maven-plugin</artifactId>
        <version>5.2022.5</version>
        <executions>
            <execution>
                <goals>
                    <goal>uberJar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
  • 构建完成后直接运行java -jar target/你的应用名-uber.jar即可,不需要单独安装服务器。

2. WildFly Bootable JAR

WildFly的Bootable JAR灵活性更高,能只打包你需要的功能模块(比如仅保留JSF和EJB),生成的JAR体积更轻量化。它同样是把服务器和应用打包成单个可执行JAR,所有资源从类路径加载,无需依赖磁盘文件。

  • 配置WildFly Maven插件的bootable-jar特性,打包完成后直接运行即可,还能自定义剔除不需要的服务器功能,进一步缩减JAR大小。

3. OpenLiberty 可执行JAR

OpenLiberty也支持类似的打包方式,使用liberty-maven-plugin的package目标,将includeServer设置为true,打包后的JAR会包含服务器和你的应用,直接运行就能启动,所有资源均从类路径加载。

关键注意事项

  • 你的应用需要使用**Jakarta EE 9+**的API,也就是把原有的javax.*命名空间替换为jakarta.*,这是当前Jakarta EE的标准规范,所有新的服务器功能都基于此版本。
  • 避免使用直接读取磁盘文件的代码(比如new File(...)),改用ClassLoader.getResourceAsStream()从类路径加载资源,这样在JAR内部也能正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:42