springboot項目打包、部署Tomcat流程詳解


項目打包
1.移除springboot內置tomcat,在pom文件中找到spring-boot-starter-web依賴,替換成以下依賴。(僅在項目打包時移除內置tomcat)

<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>

 

或者增加下列依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!-- provided代表該依賴參與編譯和運行,打包的時候排除該依賴 -->
    <!-- 默認為compile代表后續運行,測試,打包都會被包含進去-->
    <!-- 默認為runntime代表只有運行會被包含進去-->
    <!-- 默認為system代表從本地文件系統獲取依賴,配合systempath使用-->
    <scope>provided</scope>
</dependency>

 


2.啟動類繼承SpringBootServletInitializer

 

 


3.修改pom文件的打包類型(jar、war)

 

 


4.使用maven管理生命周期中的clean和package打包項目(這里演示的是單模塊項目)

 

 

打包過程中,就會出現下列錯誤。

Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.4.1:repackage failed: Unable to find main class
錯誤原因:使用maven提供spring boot的打包插件spring-boot-maven-plugin情況下,該插件會尋找項目中的主方法入口,但是在剛剛繼承SpringBootServletInitializer類時,我們注釋掉了主方法入口,所以導致打包失敗。

解決方法:
1.使用普通的maven項目打包插件同時注釋掉springboot項目的打包插件。

<plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-war-plugin</artifactId>

                <version>3.0.0</version>

                <configuration>

                <!-- 打包時監測是否有web.xml文件,當為true時,項目可能會因為沒有web.xml文件部署失敗,這里關掉監測 -->

                    <failOnMissingWebXml>false</failOnMissingWebXml>

                    <warName>${project.artifactId}</warName>

                </configuration>

            </plugin>

 

2.springboot啟動類取消繼承SpringBootServletInitializer同時在同級下創建Xxx(Xxx為項目名,就是你springboot啟動類Application前面的項目名稱)ServletIntializer類繼承SpringBootServletInitializer,這樣就既有主方法入口,也有SpringBootServletInitializer在外置的Tomcat服務器中映射路徑。

 

 

打包成功后,可以在target文件夾下找到對應的jar包或者war包。

 

 

接下來開始部署war包。(如果是jar包,則打開命令行窗口,進入jar所在文件位置輸入並執行java -jar 包名.jar就可以運行了)

部署流程
1.首先打開本地的tomcat所在文件地址,找到webapps文件夾,將打包好的war粘貼到webapps文件夾中

 

 

 

 

 

 

 

2.然后進入bin文件夾中找到startup.bat文件,雙擊運行或者右鍵管理員運行。

 

 

 

 

 

訪問項目,正常訪問即部署成功
部署問題集合(重要)
1.明明startup啟動tomcat成功,war包也成功被編譯,為什么訪問對應路徑或者接口會出現http404錯誤,該資源不存在或者沒有權限訪問。
原因:開發中,如果我們在項目的properties文件或者yml文件設置了項目的根路徑或者端口號,用idea中的tomcat服務去運行項目,那么訪問路徑就是localhost:+配置文件中的端口號(默認80)+配置文件中的項目根路徑(默認為/),所以當我們設置了端口號為8080,項目根路徑為/xx時,那么我們訪問資源的所有地址前面都要加上http://localhost:8080/xx+(/…我們的訪問路徑),遵守的是項目配置文件的規則。但是,如果打包成war包放在Tomcat上運行時,項目配置文件中的端口和根路徑會失效。遵守的規則則是tomcat的bin目錄下server.xml文件中的配置。項目根路徑則是對應war包的包名。
所以,當使用tomcat的startup去啟動項目或者注冊成服務啟動項目時,我們訪問的路徑應該為http://localhost:+(tomcat配置文件的端口號,默認8080)+(項目根路徑,則是/加上war包名)
例如:
博主本機的是沒改動的,端口號為8080。項目根路徑則為war包的包名

 

 

<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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM