Spring Boot项目打包和运行

06-02 1036阅读

目录

一、打包为JAR包并运行

1.打包为可执行的 JAR 包

(1)添加Maven打包插件

(2)使用IDEA进行打包

2.运行 JAR 包

二、打包为WAR包并运行

1.打包为可执行的 WAR 包

(1)声明打包方式为war

(2)排除内置 Tomcat

(3)添加Tomcat 依赖

(4)添加插件

(5)修改 Spring Boot启动类

2.运行 WAR 包


一、打包为JAR包并运行

        Spring Boot 应用内嵌了 Web 服务器,所以基于 Spring Boot 开发的 web应用也可以独立运行,无须部署到其他 Web服务器中。下面以打包demo_test1项目为例,将 Spring Boot 项目打包为可执行的 JAR 包并运行,具体操作如下。

1.打包为可执行的 JAR 包

(1)添加Maven打包插件

        SpringBoot程序是基于 Maven 创建的,在对SpringBoot 项目进行打包前,需要在项目pom.xml文件中加入 Maven 打包插件,Spring Boot 为项目打包提供了整合后的 Maven 打包插件 spring-boot-maven-plugin,可以直接使用,具体代码如下。

    
        
        
            org.springframework.boot
            spring-boot-maven-plugin
            ${spring-boot.version}
        
    

(2)使用IDEA进行打包

        在Maven中提供了package 打包指令,IDEA 中也提供了非常便捷的项目打包支持。在此选择在IDEA中对项目进行打包。在IDEA中单击右侧的“Maven”工具栏,会弹出 Maven 的操作界面,如图所示。

Spring Boot项目打包和运行

        Lifecycle(生命周期)下展示了 Maven 项目构建生命周期中常用的命令,选中对应的命令双击后可以快速执行该Maven 命令。其中,clean 命令可以清除所有在构建过程中生成的文件,test 命令可以使用合适的单元测试框架来测试编译的源代码,package 命令可以完成项目编译、单元测试、打包功能。

        为了确保打包后的项目为最新编译的代码,并且不包含测试阶段的代码,可以在打创前先执行 clean 命令,在跳过测试阶段的模块后进行打包。首先在 Maven 操作界面中双击“clean”执行清除 target 操作,然后单击界面上方的Spring Boot项目打包和运行图标设置打包时跳过测试阶段的模块,最后双击“package”执行打包操作。执行打包操作后,会在控制台中输出打包的结果,如果打包成功会在项目的target 文件夹下创建项目对应的可执行JAR包,如图所示。

Spring Boot项目打包和运行

2.运行 JAR 包

        一个可执行的 JAR包可以由 Java虚拟机(Java Virtual Machine,JVM)直接执行而无须事先提取文件或者设置类路径。对此可以直接使用Java命令运行可执行的JAR包,运行JAR 包的命令的语法格式如下。

java -jar JAR包名称

JAR包名称为包含 JAR后缀的完整名称。

        运行JAR包时可以选择在IDEA中或者在cmd窗口中执行,这里选择在cmd窗口中执行。在本地打开项目的target 文件夹,如图所示。

Spring Boot项目打包和运行

        在地址栏中输人“cmd”后按下“Enter”键,在当前文件夹路径下打开 cmd窗口,并在弹出的 cmd 窗口中使用 Java 命令运行 chapter01-0.0.1-SNAPSHOT.jar,如图所示。

Spring Boot项目打包和运行

        可以看出,Spring Boot项目打成的JAR 包已经成功运行,并显示了默认的端口号8080。需要注意的是,由于执行Java命令需要计算机中安装了Java的JDK环境,如果没有安装的话,执行后会报错。

        JAR 包运行后,可以对项目进行访问,以测试打包后的效果,在浏览器中访问 http://localhost:8080,如图所示。

Spring Boot项目打包和运行

二、打包为WAR包并运行

        虽然通过 Spring Boot内嵌的Tomcat 可以将项目打成JAR包后直接运行,但每个JAR包中都会包含独立的 web 容器,对服务器的使用消耗会比较大。当想要在一个 Web容器中运行多个项目时,可以把每个项目打包成一个WAR包,然后部署到Web容器中运行下面以打包demo_test1项目为例,将Spring Boot项目打包为WAR 包并运行,具体操作如下。

1.打包为可执行的 WAR 包

(1)声明打包方式为war

        默认情况下创建的 Spring Boot 项目打包方式为jar,要将项目打包为WAR包,需要在项目的pom.xml文件中声明当前项目的打包方式为war。打开demo_test1项目的 pom.xml文件,使用标签声明项目打包方式为 war,如图。

Spring Boot项目打包和运行

(2)排除内置 Tomcat

        Spring Boot 为项目提供了内嵌的 Tomcat 服务器,使用外部的 Tomcat 时,需要在 pom.xml文件中排除内置的Tomcat,具体代码如下。

    org.springframework.boot
    spring-boot-starter-web
    
        
            org.springframework.boot
            spring-boot-starter-tomcat
        
    

        在上述代码中,在spring-boot-starter-web的依赖中使用标签声明排除该启

动器中的 Tomcat。

(3)添加Tomcat 依赖

        排除内置的Tomcat后,需要在 pom.xml文件中手动添加 Tomcat的依赖,以便在后续开发中使用对应的 API,具体代码如下。

    org.springframework.boot
    spring-boot-starter-tomcat
    
    provided

        在上述代码中添加了 Tomcat 的依赖,由于对应 Tomcat 的依赖只需在编译和测试阶段使用,所以使用标签将该依赖的作用范围指定在编译和测试阶段,避免打包时将对应的依赖打包到 WAR 包中。

(4)添加插件

在项目的 pom.xml 文件中定义打包插件,以及项目打包后包的名称具体代码如下。

    demo_test1_war
    
        
            org.springframework.boot
            spring-boot-maven-plugin
            ${spring-boot.version}
        
    

        在上述代码中,使用标签用于指定项目打包后的名称;标签用于指定打包插件。

(5)修改 Spring Boot启动类

        Spring Boot启动项目的方式有很多种,使用外置 Tomcat时,默认启动类需要继承 SpringBootServletInitializer 类,并重写configure()方法。SpringBooServletInitializer 执行时,会通过重写的 confgure()方法中的 SpringApplicationBuilder 实例构建并封装 SpringApplication 对象,并最终调用SpringApplication的run()方法进行项目的启动。修改后的 Spring Boot 启动类如下面代码所示。

package com.merlin.demo_test1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@ServletComponentScan // 开启基于注解方式的Servlet组件扫描支持
@SpringBootApplication
public class DemoTest1Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoTest1Application.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(DemoTest1Application.class, args);
    }
}

        在上述代码中,启动类 DemoTest1Application继承SpringBootServletInitializer 类并重写configure()方法,在confgure()方法中,sources(DemoTest1Application.class)方法的参数必须是项目主程序的启动类。需要说明的是,为Spring Boot提供启动的Servlet 初始化器 SpringBootServletInitializer 时,典型的做法就是让主程序启动类继承 SpringBootServletInitializer 类并实现 confgure()方法;除此之外,还可以在项目中单独提供一个继承 SpringBootServletInitializer 的子类,并实现 confgure()方法。

        至此,将项目打包为WAR包的准备工作已经完成,下面参照之前使用Maven工具栏中的命令打包项目的过程,将项目进行打包,打包后的结果如图所示。

Spring Boot项目打包和运行

        从上图可以看出,控制台输出“BUILD SUCCESS”等信息,并且在项目的target 文件夹下创建了项目名称为demo_test1_war的WAR包,说明成功将项目打包为可执行 WAR 包。

错误信息:Spring Boot项目打包和运行

解决方法:在src/main/webapp/WEB-INF/目录下创建一个简单的web.xml文件,内容可以是最小化的配置:


然后clean后再package打包一次即可。

2.运行 WAR 包

        将打包好的 WAR包复制到本地Tomcat安装目录下的webapps文件夹中,在cmd窗口中执行 Tomcat 安装目录下 bin 目录中的 startup.bat 命令启动 Tomcat。Tomcat 启动后,执行效果如图所示。

Spring Boot项目打包和运行

        从上图可以看出,Tomcat启动成功。Tomcat启动时会自动解压Tomcat安装目录下的 webapps 文件夹中的 WAR 包,并部署在Tomcat中,此时可以对项目进行访问。需要说明的是,对这种使用外部Tomcat 部署的项目进行访问时,必须加上项目名称,即打包成WAR 包后的项目全名,例如访问demo_test1_war项目映射路径为根目录,其对应的请求地址为“http://http://localhost:8080/demo_test1_war/”,在浏览器中的访问效果如下图所示。

Spring Boot项目打包和运行

        从上图可以得出,将打包的 WAR 包部署到外部Tomcat后,可以正常对项目的资源进行访问。

需要注意的是,Spring Boot 2.7.6默认内嵌 Tomcat 的版本为9.0.69,将指定版本的 Spring Boot 项目以 WAR 包形式部署到外部Tomcat 中时,应尽量使用与 Spring Boot 项目匹配的Tomcat 版本进行项目部署,否则在部署过程中可能出现异常。

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码