Spring Boot项目打包和运行

该文章已生成可运行项目,

目录

一、打包为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,可以直接使用,具体代码如下。

<build>
    <plugins>
        <!--Maven打包插件-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
        </plugin>
    </plugins>
</build>

(2)使用IDEA进行打包

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

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

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

2.运行 JAR 包

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

java -jar JAR包名称

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

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

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

        可以看出,Spring Boot项目打成的JAR 包已经成功运行,并显示了默认的端口号8080。需要注意的是,由于执行Java命令需要计算机中安装了Java的JDK环境,如果没有安装的话,执行后会报错。
        JAR 包运行后,可以对项目进行访问,以测试打包后的效果,在浏览器中访问 http://localhost:8080,如图所示。

二、打包为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文件,使用<packaging>标签声明项目打包方式为 war,如图。

(2)排除内置 Tomcat

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

        在上述代码中,在spring-boot-starter-web的依赖中使用<exclusion>标签声明排除该启
动器中的 Tomcat。

(3)添加Tomcat 依赖

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--仅在编译和测试阶段使用,不会被打包到war包中-->
    <scope>provided</scope>
</dependency>

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

(4)添加插件

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

<build>
    <finalName>demo_test1_war</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
        </plugin>
    </plugins>
</build>

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

(5)修改 Spring Boot启动类

        Spring Boot启动项目的方式有很多种,使用外置 Tomcat时,默认启动类需要继承 SpringBootServletInitializer 类,并重写configure()方法。SpringBooServletInitializer 执行时,会通过重写的 confgure()方法中的 SpringApplicationBuilder 实例构建并封装 SpringApplication 对象,并最终调用SpringApplicationrun()方法进行项目的启动。修改后的 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工具栏中的命令打包项目的过程,将项目进行打包,打包后的结果如图所示。

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

错误信息:

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

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

2.运行 WAR 包

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

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

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

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值