欢迎光临
我们一直在努力

打包的java的war包或者jar包是如何到服务器上运行起来的

Java 的 WAR 包(Web 应用归档)和 JAR 包(Java 归档)部署到服务器并运行的核心逻辑是:先让服务器具备 Java 运行环境,再通过对应工具(容器 / 命令)解析包内的字节码、依赖和配置,最终启动应用进程。两者的部署流程因包的用途(Web 应用 vs 独立应用)略有差异,下面分步骤详细说明:

  • WAR 包:Web 应用专属 → 服务器装 Web 容器(Tomcat)→ 上传 WAR 到 webapps → 启动容器自动运行;
  • JAR 包:独立应用 → 服务器仅需 JDK → 上传 JAR → java -jar 命令启动(后台运行 + 开机自启适配生产);
  • 核心关键:服务器有 JDK、端口放行、权限足够,根据包类型选择对应容器 / 命令即可。
  • 1.前提:服务器必备环境

    无论部署 WAR 还是 JAR,服务器都必须先满足基础依赖:

  • 安装 JDK/JRE:应用运行依赖 Java 运行环境(JRE),开发 / 调试需 JDK(含编译工具)。
    • 步骤:下载对应系统(Linux/Windows)的 JDK(推荐 8/11 版本,兼容性最好)→ 配置环境变量(JAVA_HOME 指向 JDK 安装目录,PATH 追加 %JAVA_HOME%/bin)→ 验证:java -version 输出版本号。
  • 网络 / 权限准备:
    • 开放应用端口(如 Tomcat 默认 8080、Spring Boot JAR 默认 8080),云服务器需配置安全组放行端口;
    • 服务器目录权限:部署目录(如 /usr/local/app)需有读写执行权限(避免启动时权限不足)。
  • 2.WAR 包:Web 应用的部署(依赖 Web 容器)

    WAR 包是为 Web 应用设计的(含 Servlet、JSP、静态资源等),不能直接运行,必须依赖 Web 容器(本质是解析 WAR 结构、管理 Web 应用生命周期的 Java 程序),主流容器有 Tomcat、Jetty、JBoss 等,以最常用的 Tomcat 为例:

    2.1. WAR 包的核心结构(了解即可,无需手动改)

    xxx.war
    ├── WEB-INF/ # 核心目录(容器识别的关键)
    │ ├── classes/ # 你的 Java 代码编译后的 .class 文件
    │ ├── lib/ # 应用依赖的第三方 JAR 包(如 Spring、MyBatis)
    │ └── web.xml # Web 应用配置(Servlet 映射、过滤器等,Spring Boot 可省略)
    ├── static/ # 静态资源(HTML、CSS、JS、图片,Spring Boot 标准目录)
    └── META-INF/ # 包元数据(如 MANIFEST.MF)

    2.2. 部署 & 运行步骤(Tomcat 为例)

    2.2.1:安装 Tomcat 容器

    • 下载 Tomcat(对应 JDK 版本,如 Tomcat 9 适配 JDK 8+)→ 解压到服务器目录(如 /usr/local/tomcat);
    • 验证 Tomcat 可用性:进入 tomcat/bin 目录,执行 ./startup.sh(Linux)或 startup.bat(Windows)→ 浏览器访问 http://服务器IP:8080,能看到 Tomcat 默认页面则成功。

    2.2.2:上传 WAR 包到 Tomcat

    将本地打包好的 WAR 包(如 demo.war),通过工具(Xshell+Xftp、WinSCP、Jenkins 自动化部署)上传到 Tomcat 的 webapps 目录(核心目录,Tomcat 会自动扫描该目录下的 WAR 包)。

    2.2.3:启动 Tomcat,自动部署 WAR 包

    • 若 Tomcat 已启动:上传 WAR 包后,Tomcat 会自动解压 WAR 包(在 webapps 下生成同名文件夹 demo),并加载应用;
    • 若未启动:执行 tomcat/bin/startup.sh(Linux)启动 Tomcat,启动时会扫描 webapps 目录,解压并部署所有 WAR 包。

    2.2.4:访问应用

    应用访问路径格式:http://服务器IP:Tomcat端口/WAR包名(无需加 .war)。示例:WAR 包名 demo.war,Tomcat 端口 8080 → 访问 http://192.168.1.100:8080/demo。

    2.2.5补充:其他部署方式(可选)

    • 手动解压 WAR 包:将 WAR 包解压到 webapps 目录,Tomcat 会识别解压后的文件夹作为应用;
    • 修改 server.xml 配置:在 Tomcat 的 conf/server.xml 中添加 <Context> 标签,指定 WAR 包路径(适合自定义访问路径,如根路径 /);
    • 热部署:开启 Tomcat 热部署(修改 conf/server.xml 中 Context 标签的 reloadable="true"),修改 WAR 包后无需重启 Tomcat 即可生效(开发环境用,生产环境不推荐,影响性能)。

    3.JAR 包:独立应用的部署(内置容器 / 无容器)

    JAR 包用途更广:可是普通 Java 程序(无 Web 功能)、Spring Boot 应用(内置 Tomcat/Jetty 容器,无需额外 Web 容器)。核心特点是 可直接运行(前提是 MANIFEST.MF 文件配置了主类)。

    3.1. JAR 包的两种类型

    • 普通 JAR 包:仅含普通 Java 类(如工具类、控制台程序),无 Web 功能,需通过 java -jar 运行;
    • Spring Boot JAR 包:内置 Web 容器(默认 Tomcat),本质是 “可执行 JAR 包”,包含所有依赖(应用代码、第三方 JAR、内置容器),直接运行即可提供 Web 服务。

    3.2. 部署 & 运行步骤(以 Spring Boot JAR 为例,最常用)

    3.2.1:确认 JAR 包是 “可执行的”

    Spring Boot 打包时,通过 spring-boot-maven-plugin 插件会自动生成可执行 JAR(配置主类、依赖打包方式),MANIFEST.MF 中会包含:

    Main-Class: org.springframework.boot.loader.JarLauncher # Spring Boot 启动器
    Start-Class: com.demo.DemoApplication # 你的应用主类(含 main 方法)

    本地可先验证:java -jar demo.jar,能启动则说明包没问题。

    3.2.2:上传 JAR 包到服务器

    通过工具(Xftp、WinSCP 等)将 JAR 包(如 demo.jar)上传到服务器指定目录(如 /usr/local/app)。

    3.2.3:运行 JAR 包(核心步骤)

    在服务器终端进入 JAR 包所在目录,执行以下命令(根据需求选择):

    运行方式命令示例适用场景优点 / 注意事项
    前台运行(临时测试) java -jar demo.jar 开发 / 测试(快速验证) 简单直接;关闭终端 / 断开连接,应用立即停止
    后台运行(生产常用) nohup java -jar demo.jar & 生产环境(长期运行) 断开连接后应用继续运行;日志默认输出到 nohup.out
    指定端口运行 nohup java -jar demo.jar –server.port=8090 & 避免端口冲突 覆盖配置文件中的端口(Spring Boot 特性)
    指定配置文件运行 nohup java -jar demo.jar –spring.profiles.active=prod & 多环境(开发 / 测试 / 生产) 加载 application-prod.yml 生产环境配置
    限制 JVM 内存运行 nohup java -Xms512m -Xmx1024m -jar demo.jar & 避免内存溢出 -Xms(初始堆内存)、-Xmx(最大堆内存)

    3.2.4:访问应用(Spring Boot 为例)

    因内置 Tomcat,直接访问:http://服务器IP:端口(端口默认 8080,或命令中指定的端口)。示例:java -jar demo.jar –server.port=8090 → 访问 http://192.168.1.100:8090。

    3.2.5:停止应用(生产必备)

    • 方式 1:查找进程 ID(PID)→ 杀死进程:

      ps -ef | grep demo.jar # 查找 PID(第二列是 PID)
      kill -9 12345 # 12345 是 PID,强制停止

    • 方式 2:优雅停止(Spring Boot 2.3+ 支持):

      # 启动时指定 PID 文件
      nohup java -jar demo.jar –spring.pid.file=demo.pid &
      # 优雅停止(发送 SIGTERM 信号,应用会释放资源后退出)
      kill -15 $(cat demo.pid)

    3.2.6补充:普通 JAR 包(无 Web 功能)的运行

    若 JAR 包是普通 Java 程序(如控制台工具),仅需:

  • 确保 MANIFEST.MF 配置了主类(如 Main-Class: com.demo.MyMain);
  • 服务器执行:java -jar demo.jar(前台运行)或 nohup java -jar demo.jar &(后台运行);
  • 日志查看:前台运行时日志直接输出到终端,后台运行日志在 nohup.out。
  • 4.生产环境优化(可选但推荐)

  • 日志管理:

    • WAR 包:配置 Tomcat 的日志(conf/logging.properties),或应用自身日志框架(Logback/Log4j2)输出到指定目录;
    • JAR 包:通过 logging.file.name 指定日志路径(如 java -jar demo.jar –logging.file.name=/var/log/demo.log),避免日志堆积在 nohup.out。
  • 开机自启:避免服务器重启后应用需手动启动,以 Linux 为例(Systemd 服务):

    # 1. 创建服务文件
    vi /etc/systemd/system/demo.service
    # 2. 写入以下内容(修改路径和命令)
    [Unit]
    Description=Demo Spring Boot App
    After=network.target
    [Service]
    User=root
    WorkingDirectory=/usr/local/app
    ExecStart=/usr/local/jdk/bin/java -jar demo.jar –server.port=8080
    SuccessExitStatus=143
    [Install]
    WantedBy=multi-user.target
    # 3. 启用并启动服务
    systemctl daemon-reload
    systemctl enable demo.service # 开机自启
    systemctl start demo.service # 启动服务
    systemctl status demo.service # 查看状态

  • 自动化部署:生产环境推荐用 Jenkins、GitLab CI/CD 等工具,实现 “代码提交 → 自动打包 → 自动上传服务器 → 自动重启应用”,减少手动操作失误。

  • 5.核心区别总结(WAR vs JAR)

    维度WAR 包JAR 包(可执行)
    用途 Web 应用(Servlet、JSP、Web 接口) 独立应用(普通 Java 程序、Spring Boot 应用)
    运行依赖 必须依赖 Web 容器(Tomcat/Jetty) 无需额外容器(内置容器或直接运行)
    部署方式 上传到容器的 webapps 目录,容器自动部署 上传后通过 java -jar 命令启动
    访问路径 容器端口 + 包名(如 8080/demo) 直接访问容器端口(如 8080)
    赞(0)
    未经允许不得转载:171主机测评 » 打包的java的war包或者jar包是如何到服务器上运行起来的
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址