xxx.jar或者xxx.war中沒有主清單屬性和spring-boot-maven-plugin的作用
阿新 • • 發佈:2018-12-23
因為springboot本身集成了tomcat外掛,所以我們可以直接使用
mvn clean package
命令打成jar包或者war包,然後使java -jar xxx.jar
或者java -jar xxx.war
命令非常方便的去部署執行專案。
但是在執行命令時提示:
PS F:\wkh_code\my-blog\target> java -jar myblog.war
myblog.war中沒有主清單屬性
PS F:\wkh_code\my-blog\target>
這裡引出一個問題:主清單屬性是什麼
當我們把springboot專案打成war包或者jar後,解壓之後我們可以發現一個名為==META-INF==資料夾。其中META-INF資料夾下有一個名為MANIFEST.MF的檔案,該檔案指明瞭程式的入口以及版本資訊等內容,內容如下
Manifest-Version: 1.0 Implementation-Title: my-blog Implementation-Version: 1.0-SNAPSHOT Archiver-Version: Plexus Archiver Built-By: hua Implementation-Vendor-Id: com.wangkaihua Spring-Boot-Version: 1.4.0.RELEASE Implementation-Vendor: Pivotal Software, Inc. Main-Class: org.springframework.boot.loader.WarLauncher Start-Class: com.wangkaihua.myblog.Application Spring-Boot-Classes: WEB-INF/classes/ Spring-Boot-Lib: WEB-INF/lib/ Created-By: Apache Maven 3.5.0 Build-Jdk: 1.8.0_144 Implementation-URL: http://projects.spring.io/spring-boot/my-blog/
其中有==Start-Class==:指明瞭程式的入口類、==Spring-Boot-Classes==:指明瞭類的路徑,所有編譯後的class檔案還有==Spring-Boot-Lib==等等,這些都是springboot專案獨立執行必須要知道的。所以應該是我們打包的姿勢不對,我們缺少了一個打包外掛:==spring-boot-maven-plugin==
這裡引出第二個問題:spring-boot-maven-plugin作用
Spring Boot Maven plugin能夠將Spring Boot應用打包為可執行的jar或war檔案,然後以通常的方式執行Spring Boot應用。
解決方法
在pom.xml中引入對spring-boot-maven-plugin外掛的依賴
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
執行mvn clean package
,將自動生成必要的主清單屬性,執行java -jar xxx.jar
或者java -jar xxx.war
時會根據主清單屬性找到啟動類啟動程式。