打包jar
Spring官網Guides下任意一個例子,比如最簡單的Building a RESTful Web Service打包war
參考Spring Boot文檔 Traditional deployment 85.1 Create a deployable war file
或例程 spring-boot-sample-war按例程看,如果
@SpringBootApplication
的class直接繼承了SpringBootServletInitializer
,不用重寫config
方法也是可以的(builder.main(getClass())
、get的就是應用class)。打包一個又能發佈於tomcat又能
java -jar
直接跑的war
2的參考文檔裏有:If you’re using the Spring Boot build tools, marking the embedded servlet container dependency as provided will produce an executable war file with the provided dependencies packaged in a lib-provided directory.
另外:
Maven 66.2 Packaging executable jar and war files
Gradle 67.3 Packaging executable jar and war files觀察幾種配置的發佈包子目錄和其下jar包,並比較MENIFEST.MF:
bootRun時有:Start-Class: hello.Application Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Main-Class: org.springframework.boot.loader.JarLauncher
不過關心的是war包:
Start-Class: hello.Application Spring-Boot-Classes: WEB-INF/classes/ Spring-Boot-Lib: WEB-INF/lib/ Main-Class: org.springframework.boot.loader.WarLauncher
應該是丟給tomcat時、tomcat只檢查servlet定義的WEB-INF/lib路徑,但
java -jar
時、Spring的WarLauncher還引入了存放着tomcat相關jar的lib-provided
目錄:@Override public boolean isNestedArchive(Archive.Entry entry) { if (entry.isDirectory()) { return entry.getName().equals(WEB_INF_CLASSES); } else { return entry.getName().startsWith(WEB_INF_LIB) || entry.getName().startsWith(WEB_INF_LIB_PROVIDED); } }
所以兩種都能跑。
[筆記]spring boot打包jar和war
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.