SpringBoot項目打包和運行
打包為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中</dependencies>后面添加):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(如果是通過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
<groupId>org.example</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>myapp</name>
<description>myapp</description>
在pom.xml中添加<packaging>war</packaging>
排除內置Tomcat(可選)
此為教材中的步驟,不做也沒事,具體是否有影響可以嘗試探究。
添加Tomcat依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
注意<scope>provided</scope>
添加插件(必要)+指定項目打包后的名稱(可選)
<build>
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
修改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
浙公網安備 33010602011771號