整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Spring Boot 項(xiàng)目打包成war如此簡單

          Spring Boot 項(xiàng)目打包成war如此簡單

          先,已經(jīng)有現(xiàn)成的打包成jar的spring boot項(xiàng)目。

          修改pom.xml

          我們既然想使用外部servlet容器,那就需要移除SpringBoot的內(nèi)置tomcat。在pom.xml中添加如下內(nèi)容:

          <!--這里修改了內(nèi)置Tomcat的作用域-->
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-tomcat</artifactId>
                      <scope>provided</scope>
                  </dependency>

          scope的可選值以及介紹:
          compile:默認(rèn)就是compile,什么都不配置也就是意味著compile。compile表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,當(dāng)然后續(xù)的測試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。打包的時(shí)候通常需要包含進(jìn)去。
          test:scope為test表示依賴項(xiàng)目僅僅參與測試相關(guān)的工作,包括測試代碼的編譯,執(zhí)行。比較典型的如junit。
          runtime:runntime表示被依賴項(xiàng)目無需參與項(xiàng)目的編譯,不過后期的測試和運(yùn)行周期需要其參與。與compile相比,跳過編譯而已,說實(shí)話在終端的項(xiàng)目(非開源,企業(yè)內(nèi)部系統(tǒng))中,和compile區(qū)別不是很大。比較常見的如JSR×××的實(shí)現(xiàn),對應(yīng)的API jar是compile的,具體實(shí)現(xiàn)是runtime的,compile只需要知道接口就足夠了。Oracle jdbc驅(qū)動(dòng)架包就是一個(gè)很好的例子,一般scope為runntime。另外runntime的依賴通常和optional搭配使用,optional為true。我可以用A實(shí)現(xiàn),也可以用B實(shí)現(xiàn)。
          provided:provided意味著打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施(Web Container)會(huì)提供。事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測試,運(yùn)行等周期。相當(dāng)于compile,但是在打包階段做了exclude的動(dòng)作。
          system:從參與度來說,與provided相同,不過被依賴項(xiàng)不會(huì)從maven倉庫抓,而是從本地文件系統(tǒng)拿,一定需要配合systemPath屬性使用。

          繼承SpringBootServletInitializer類

          /**
           * 修改啟動(dòng)類,繼承 SpringBootServletInitializer 并重寫 configure 方法
           */
          public class SpringBootStartApplication extends SpringBootServletInitializer {
          
              @Override
              protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
                  // 注意這里要指向原先用main方法執(zhí)行的Application啟動(dòng)類
                  return builder.sources([啟動(dòng)類].class);
              }
          }

          補(bǔ)全項(xiàng)目目錄結(jié)構(gòu)

          當(dāng)項(xiàng)目打包設(shè)置成war后,項(xiàng)目的文件結(jié)構(gòu)還不是我們預(yù)期的,缺少WEB-INF,webapp等,有兩個(gè)方法補(bǔ)齊,一手動(dòng)創(chuàng)建目錄二配置idea自動(dòng)創(chuàng)建。這里采用第二種。

          打開project structure

          1. 設(shè)置webapp目錄
          2. 設(shè)置web.xml目錄。
          3. 設(shè)置完畢后會(huì)新增一條。

          整體目錄結(jié)構(gòu)如下:

          啟動(dòng)tomcat,測試一下吧。正常情況下應(yīng)該是瀏覽器自動(dòng)跳轉(zhuǎn)到index.html頁面了。


          事問了,打成war不能執(zhí)行,報(bào)錯(cuò),找了好久找不到原因,今天自己也碰到這個(gè)問題,一樣的。


          原因是servlet關(guān)聯(lián)沒有,二是啟動(dòng)時(shí)調(diào)用原始的啟動(dòng)類


          解決方案如下:


          pom.xml

          1、打war

          <packaging>war</packaging>


          2、去掉關(guān)聯(lián),可選步驟

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

          3、添加servlet-api的依賴(下面任一)

          <!--要放到tomcat中運(yùn)行,war的方式,加這個(gè),否則不用加-->
          <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、增加啟動(dòng)再調(diào)用原始的main類

          若原始的啟動(dòng)類是:AdminApplication,那么在同包中,增加如下的文件

          import org.springframework.boot.builder.SpringApplicationBuilder;
          import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
          /**
          * 增加這個(gè)類,修改啟動(dòng)類,繼承 SpringBootServletInitializer 并重寫 configure 方法
          */
          public class SpringBootStartApplication extends SpringBootServletInitializer {
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
          // 注意這里要指向原先用main方法執(zhí)行的Application啟動(dòng)類
          return builder.sources(AdminApplication.class);
          }
          }


          或者啟動(dòng)類改成

          項(xiàng)目需要將前端部署到tangweb7.0,所以需要將vue前端打包成war包,可以進(jìn)行如下操作:

          1、先生成dist,命令行cmd中切換到項(xiàng)目目錄下(cd 項(xiàng)目文件夾),運(yùn)行命令: npm run build

          2、生成完成后在cmd中再切到dist目錄下,運(yùn)行命令:jar -cvf dist.war *,打包完成

          3、tangweb7.0 部署完成后報(bào)404,還沒有解決。。。

          如圖所示,如果哪位有遇到過此類問題,可以告訴我一下,多謝。

          截圖2主要提示內(nèi)容:we're sorry but xxx doesn't work properly without javascript enabled. please enabled it to conitnue 。已百度查過相關(guān)問題,加了web.xml文件,然后再打包還是此問題,所以懷疑是哪里配置的不對,或者打包是不是需要做什么修改調(diào)整。

          ps:如果有其他信創(chuàng)的web容器也可以推薦一下,最好是免費(fèi)的或者是費(fèi)用低的。


          主站蜘蛛池模板: jizz免费一区二区三区| 午夜无码一区二区三区在线观看| 亚洲一区二区三区在线观看精品中文 | 中文字幕AV一区二区三区 | 亚洲一区二区三区精品视频| 国产精品伦一区二区三级视频| 国模大尺度视频一区二区| 精品视频一区二区三区四区五区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 日本精品一区二区三本中文| 国产精品一区二区三区高清在线| 一区二区三区美女视频| 无码一区二区三区| 国产一区美女视频| 国产一区二区三区在线看| 久久精品免费一区二区| 精品欧美一区二区在线观看| 蜜桃视频一区二区| 精品乱人伦一区二区三区| 亚洲AV无码一区二区三区鸳鸯影院 | 一区二区三区内射美女毛片| 亚洲无线码一区二区三区| 亚洲一区精品无码| 中文激情在线一区二区| 黑巨人与欧美精品一区| av无码精品一区二区三区四区| 国产综合无码一区二区辣椒 | 日本精品无码一区二区三区久久久| 国产AV一区二区精品凹凸| 色欲精品国产一区二区三区AV| 精品亚洲AV无码一区二区| 在线日韩麻豆一区| 精品国产免费观看一区| 精品少妇ay一区二区三区| 夜色福利一区二区三区| 不卡一区二区在线| 红桃AV一区二区三区在线无码AV| 国产一区二区三区在线看片| 国产一区二区好的精华液| 无码播放一区二区三区| 久久国产精品最新一区|