多模塊springboot項目啟動訪問不了jsp頁面


  被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包放到騰訊雲服務器上運行了。。。

 


免責聲明!

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



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