SpringBoot项目打包和运行

世界杯梅西点球

打包为JAR包并运行 先实现一个入门案例: package org.example.myapp; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati……

打包为JAR包并运行

先实现一个入门案例:

package org.example.myapp;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class MyController {

@RequestMapping("/123")

public String hello() {

return "Hello World";

}

}

确保它可以正常运行。现在希望将该项目打包成一个JAR包。不想再通过IDEA执行。

添加依赖

此时,需要添加一个打包插件(在pom.xml中后面添加):

org.springframework.boot

spring-boot-maven-plugin

(如果是通过spring initializr创建的项目,上述代码会自动添加)

执行package指令进行打包

现在就具备了打包的前提条件,只需要执行maven的打包(package)指令即可。

要执行这个指令有两种途径。

途径1——通过IDEA的可视化界面进行打包。找到如下界面,找到package双击即可,点击绿色箭头所指的按钮可跳过测试阶段:

途径2——命令行方式(需要设置maven的环境变量):

在有pom.xml文件的项目路径下,启动cmd,执行mvn clean package指令。

采用mvn clean package -DskipTests可跳过测试。

执行JAR

两种方式都可以获得JAR包

可在target文件夹下找到

可以将它复制到任意位置通过java -jar指令执行。

打包为WAR包并运行

希望将上面项目改为打包成WAR包,需要做一些修改。

首先要修改pom.xml文件,然后添加一些代码。

声明打包方式为war

org.example

myapp

0.0.1-SNAPSHOT

war

myapp

myapp

在pom.xml中添加war

排除内置Tomcat(可选)

此为教材中的步骤,不做也没事,具体是否有影响可以尝试探究。

添加Tomcat依赖

org.springframework.boot

spring-boot-starter-tomcat

provided

注意provided

添加插件(必要)+指定项目打包后的名称(可选)

myapp

org.springframework.boot

spring-boot-maven-plugin

修改SpringBoot启动类

这里不采用教材方式,教材中是直接去修改启动类代码。我们添加一个ServletInitializer类:

public class ServletInitializer extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(MyappApplication.class);

}

}

修改完之后,依然通过命令行或是IDEA可视化界面进行打包,

得到xxx.war包,放在Tomcat安装目录下的webapps文件夹下,通过Tomcat安装目录下bin目录中的startup.bat命令启动Tomcat即可。

访问时候需要注意,不能通过http://localhost:8080/123,而是要通过http://localhost:8080/xxx/123。

相关问题

ServletInitializer为何不需要用注解标注?

public class ServletInitializer extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(Demo1Application.class);

}

}

答:Servlet 容器(如 Tomcat)在启动时会自动识别并加SpringBootServletInitializer类的子类,无需显式注解标注。

因此,类名ServletInitializer是可以随便取的,关键是继承SpringBootServletInitializer