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

如何基于Javalite框架构建可独立运行的HTTP可执行JAR包

我来帮你搞定用Javalite ActiveWeb构建独立可执行JAR的问题!你现在用嵌入式Tomcat的方式虽然可行,但ActiveWeb本身就内置了原生的Jetty容器支持,完全不需要手动集成Tomcat,用它的原生方式会更简洁,也更贴合框架设计。下面是具体的实现步骤:

1. 核心原理:ActiveWeb的原生启动机制

ActiveWeb提供了专门的启动类来启动内置Jetty容器,不需要你手动编写Tomcat的初始化代码。核心是通过调用ActiveWeb.start()方法来启动应用,框架会自动处理web资源加载、路由映射等底层工作。

2. 调整POM配置(替换现有插件)

你当前的maven-jar-plugin仅指定了main类,但没有打包依赖(也就是常说的“fat jar”),需要换成maven-shade-plugin来把所有依赖打包到一个JAR中,同时指定正确的入口类。

修改后的POM插件配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.5.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <!-- 指定自定义的启动入口类 -->
                        <mainClass>com.company.ActiveWebLauncher</mainClass>
                    </transformer>
                    <!-- 处理ActiveWeb的服务加载器配置,避免依赖冲突 -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
3. 编写原生启动类(替换你的Application.java)

不需要再写复杂的Tomcat初始化代码,只需要一个简单的main类调用ActiveWeb的启动方法即可:

package com.company;

import org.javalite.activeweb.ActiveWeb;

public class ActiveWebLauncher {
    public static void main(String[] args) {
        // 读取端口配置,和你原来的逻辑保持一致
        String webPort = System.getenv("PORT");
        int port = webPort == null || webPort.isEmpty() ? 8081 : Integer.parseInt(webPort);
        
        // 启动ActiveWeb内置Jetty容器:参数分别是上下文路径、web资源目录、端口
        ActiveWeb.start("/", "src/main/webapp", port);
        
        // 保持应用持续运行
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

如果你的web资源已经编译到classpath中(比如src/main/webapp下的文件被打包进JAR),还可以简化为:

ActiveWeb.start("/", port);

框架会自动从classpath的webapp目录加载静态资源和配置。

4. 打包与运行

执行Maven打包命令:

mvn clean package

打包完成后,target目录下会生成一个包含所有依赖的fat jar,运行命令:

java -jar activeweb-simple-1.1-SNAPSHOT.jar

这样就能在服务器上独立运行你的ActiveWeb应用了。

对比你当前的Tomcat实现

用ActiveWeb原生方式的优势在于:

  • 不需要手动处理Tomcat的上下文配置、资源加载等细节,框架已经封装好了
  • 内置Jetty是ActiveWeb官方推荐的容器,兼容性更好
  • 代码更简洁,仅需几行就能完成应用启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:25