------------恢復內容開始------------
本文分為兩個部分,一,是打包的步驟,二,是我項目中所遇到的問題以及解決方法
一. 打包為war包步驟
1.修改打包方式為war
在pom.xml文件中將打包格式修改為war格式
<packaging>war</packaging>
2.移除springboot自帶的tomcat插件
在pom.xml里找到spring-boot-starter-web
依賴節點,將其中包含的tocat去除
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 移除嵌入式tomcat插件 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
如果在測試時還是想以springboot方式啟動,可以再加入依賴,強烈建議該方式
<!--只在測試和編譯時使用,在平時調試時使用--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
3. 添加servlet-api的依賴
以下兩種依賴隨意添加一個
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>8.0.36</version> <scope>provided</scope> </dependency>
4. 修改啟動類,並且重寫初始化方法
springboot項目一般都有一個啟動類來啟動項目,而部署到tomcat不能通過該方式啟動,所以需要改變啟動方式,在啟動類的同級包下添加一個初始化類,並且繼承SpringBootServletInitializer
如下:
public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 注意這里要指向用main方法執行的Application啟動類 return builder.sources(VpnManagementSystemApplication.class); } }
接下來就可以打包成war包部署了,打開命令窗口,選擇powershell命令,然后在命令行里輸入: mvn clean package
即可,然后去項目的目錄下的target下就可以看到已經打包好的war包。
二. 常見問題
springboot項目在idea中放在tomcat中也是可以運行的,idea中配置一個tomcat來運行項目,最好和服務器版本一樣,測試環境和開發環境一樣才好尋找問題解決問題,以下問題都是我遇到的,以及有效的解決方法,可能
對於你的項目來說沒用,歡迎討論。
1.jar包沖突問題
在springboot項目的項目中需要手動添加的一些包可能tomcat已經存在,這時就需要刪除這些包,否則就會報錯,甚至項目直接啟動不起來比如在springboot項目下用jsp頁面,這時需要添加的依賴包在
tomcat已經存在,就會報錯,如下包
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency>-->
所以在部署到tomcat報錯時,一定要考慮依賴沖突問題。
2.使用pagehelper時,springboot方式啟動時正常,放到tomcat出現:“在系統中發現了多個分頁插件,請檢查系統配置!” 問題
該問題出現的原因在於maven的pagehelper-spring-boot-starter這個依賴,提供了自動配置分頁插件的功能,而我們還添加了如下依賴,所以就報錯,但是不添加如下依賴項目就直接找不到包,
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.12</version> </dependency>
通過在springboot啟動類加上如下注解去掉自動配置解決
@SpringBootApplication(exclude = PageHelperAutoConfiguration.class)
3,當你在idea的tomcat啟動正常,但是手動將war包放入tomcat放入webapp目錄時啟動一直報錯
該問題也就是,將2個項目部署到tomcat,第一個啟動正常,后面一個就報錯,而只啟動其中任意一個項目都不會報錯
在2個項目的配置文件application.yml中,各加入spring.jmx.default-domain = 項目名1,spring.jmx.default-domain = 項目名2 , 再次打成war,並都部署到同一個tomcat的webapps下,
啟動正常!
這是本人的第一篇博客,遇到的問題都是我自己遇到並且實測有用的方法,歡迎討論。本文方法借鑒於如下幾個鏈接,當你還有問題時不妨查看如下鏈接試試:
https://blog.csdn.net/wang__dream/article/details/80372025
https://blog.csdn.net/qq_34381084/article/details/81485319
https://www.cnblogs.com/jpfss/p/9723828.html
https://www.jianshu.com/p/18ae492099ca