打包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文件后,读取不到resources下的xml文件
- 关于 Spring Boot 后端项目使用 Maven 打包命令、JAR/WAR 对比、内嵌服务器与第三方服务器对比,以及热部署配置的详细说明
- maven打包spring boot jar没有 BOOT-INF目录解决方案
- spring boot在创建项目时选成war / jar包在项目后期应该怎么修改?
- Spring Boot 将web项目打包成jar运行
- spring boot打包fat jar
- 04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)
- Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
- Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记
- Spring Boot实战笔记(二)-- Spring常用配置(Scope、Spring EL和资源调用)