被springboot項目maven打包、啟動、訪問折騰的頭都大了,一步一個坑,在解決了所有的問題之后,那種欣喜若狂的心情只有自己能體會,決定要好好記錄一下了,廢話不多說了,直接進入正題。
問題和排查流程:
為了擴展和規范,搭建的springboot項目是一個多模塊項目,於是,問題來了,下面一個個說:
1.項目搭建完成后,application.yml文件配置了mvc視圖解析器,寫了一個controller測試,發現能進controller方法,但是死活輸出不了頁面,瀏覽器報錯如下:

上網查了很多資料,有些說springboot整合jsp要通過spring-boot:run方式啟動,具體可以參考:https://segmentfault.com/a/1190000009785247
后來我又重新搭建了一個簡單的springboot工程(注意:這一次不是多模塊項目),通過main方法啟動,卻又能正常跳轉jsp頁面,我....
2.看來是多模塊工程非得通過spring-boot:run啟動,具體原因待有緣人補充,這時候我嘗試通過spring-boot:run啟動,但是打開maven結構圖,發現Plugins下並沒有spring-boot插件,原來是因為pom.xml中沒有配置spring-boot插件導致的,興致匆匆的配置了spring-boot plugins,很開心,maven結構圖出現了亮眼的spring-boot插件


3.然而一切並沒有那么順利,當我執行mvn -package時,居然報錯很多類找不到,我....,我就多添加了一個plugin而已啊,有必要這么折磨我么,后來參考網上的文章,添加了<classifier>exec</classifier>這么一個配置,如下:

趕緊試了一把,好了,這次package終於沒報錯了,然后我就匆忙點擊spring-boot:run准備啟動項目了,然鵝....
4.啟動報錯,提示我沒有配置mainClass,原來是因為項目中含有main方法的class有點多,springboot有點蒙圈不知道找哪一個,於是在plugin中又加了一個配置<mainClass>com.mmz.WebApplication</mainClass>,指定了主類

5.然鵝,還是有問題,啟動仍然報錯,只不過這次報錯不一樣了,報classNotFundException,找不到我配置的WebApplication類。。。我很難受呀

6.查資料啊查資料,網上並沒有相關文章,后來又懷疑是多模塊項目惹的禍,重新用簡單的項目試驗了一把,結果簡單的項目就好好地運行並沒有報錯,於是仔細檢查了一下兩個項目的配置,發現啟動簡單工程時,啟動的本身就是web模塊,而我啟動多模塊工程時,運行的是root模塊下面的spring-boot插件,懷疑跟這個有關,於是嘗試啟動了web模塊下面的spring-boot:run,媽呀,終於啟動成功,並且能正常訪問頁面了,這一刻把我激動的。。。

7.你以為這樣就可以了嗎??下午試了一把把項目打包成jar的方式,運行java -jar xxx.jar方式啟動,啟動成功,但是仍然沒法訪問jsp頁面,解壓jar包發現根本沒有把webapp目錄以及其目錄下的jsp頁面打包進去,因為springboot插件打包默認不會打包自己添加的webapp目錄,於是需要在pom.xml下的build標簽里指定maven 打包目錄如下:

這時候重新打包成jar解壓,發現打包進了對應的目錄下,趕緊訪問頁面試了一把,結果......嗯,還是不可以,報了同樣的錯誤...

8.查閱資料,最后一步還需要指定spring-boot-maven-plugin的版本為1.4.2.RELEASE,其他版本都不行,據說是springboot的一個bug,於是添加了version后,再試了一把終於可以了。。至此,一個完成的spriongboot+maven,打包+啟動終於完整了。最終配置如下:
<build> <resources> <!-- 打包時將jsp文件拷貝到META-INF目錄下--> <resource> <!-- 指定resources插件處理哪個目錄下的資源文件 --> <directory>src/main/webapp</directory> <!--注意此次必須要放在此目錄下才能被訪問到--> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/**</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.4.2.RELEASE</version> <configuration> <mainClass>com.mmz.WebApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </pluginManagement> </build>
nice,接下來就是把自己的項目打好jar包放到騰訊雲服務器上運行了。。。
