本篇和大家分享的是通過maven對springboot中打war包和jar包;war通常來說生成後直接放到tomcat的webapps下面就行,tomcat配置自動解壓war,而jar一般通過指令行部署和啟動;
首先,來實戰怎麼生成war包,主要來說可以分為3個步驟:
- 程式入口改造
- 排除springboot内置tomcat
- spring-boot-maven-plugin插件中配置程式入口
程式入口改造,我們需要把springboot的main入口屏蔽掉,然後繼承SpringBootServletInitializer,并重寫configure方法,具體代碼如:
@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WebApplication.class);
}
// public static void main(String[] args){
//
// }
}
排除springboot内置tomcat,預設的情況下springboot是內建有内置tomcat,因為war需要發在我們伺服器上的tomcat中,内置的tomcat不需要,可以如下在maven中配置屏蔽:
<!--war包-排除内置tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
這裡通過scope作用域為provided來排除tomcat包,springboot架構中有包含tomcat包,scope預設的作用于是compile,編譯,測試,運作
spring-boot-maven-plugin插件中配置程式入口,上面我們屏蔽了main入口,但是tomcat還是通過啟動類作為入口,是以需要配置下啟動mainClass:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--war包-執行程式入口 -->
<configuration>
<mainClass>com.platform.WebApplication</mainClass>
</configuration>
</plugin>
最後,把入口項目的packaging指定成war類型
<packaging>war</packaging>
如上我們準備工作就完成了,下面我們僅僅maven的package打包就行了,生成後如下截圖:
war包裡面的内容就是META-INF和WEB-INF部分,我們吧war上傳到linux上的tomcat的webapps下面,一般配置tomcat都會自動解壓war包,我這裡之前寫了一個api接口,運作成功後正常在浏覽器顯示:
再來,我們開始打jar包,步驟同樣和war差不多,不過是反向的去掉注釋的内容:
- 還原main入口(springboot模闆生成的main,不做任何修改)
- 去掉排除tomcat的配置(預設就不沒有這個配置)
- 使用maven-jar-plugin插件打包,指定程式入口和各種包含|排除項
還原不注釋main入口,主要針對剛才打war注釋了main入口操作,一般采用springboot模闆預設生成就行:
public static void main(String[] args) throws ParseException, Exception {
SpringApplication springApplication = new SpringApplication(WebApplication.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
去掉排除tomcat的配置(預設就不沒有這個配置),同樣這一步也是針對打war添加了排除tomcat的配置,直接删除就行,删除:
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
<!--<scope>provided</scope>-->
<!--</dependency>-->
使用maven-jar-plugin插件打包,指定程式入口和各種包含|排除項,這裡通過jar插件配置一些項,對配置檔案和main入口指定:
<!--打jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<!--<addClasspath>true</addClasspath>-->
<!--<classpathPrefix>lib/</classpathPrefix>-->
<!--main入口-->
<mainClass>com.platform.WebApplication</mainClass>
</manifest>
</archive>
<!--包含的配置檔案-->
<!--<includes>-->
<!--<include>*.yml</include>-->
<!--<include>*.properties</include>-->
<!--<include>templates/**</include>-->
<!--<include>static/**</include>-->
<!--<include>*.xml</include>-->
<!--</includes>-->
</configuration>
</plugin>
最後,把入口項目的packaging指定成war類型:
<packaging>jar</packaging>
完成以上步驟後,能夠看到成功的jar包,如圖:
最後在linux上通過java -jar web-0.0.01.SN...jar 啟動即可。