打包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);
}
}所以两种都能跑。
相关文章
- IntelliJ IDEA 2017版 spring-boot 2.0.3 部署war包项目和jar包项目
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
- Spring Boot 的项目打包成的 JAR 包,制作成 docker 镜像并运行
- Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
- Spring Boot Maven 打包可执行Jar文件!
- 将 Spring Boot JAR 应用程序转换为 WAR
- Spring Boot打包部署修改jar文件名
- spring boot maven打包可运行jar包
- 关于springboot 打包问题 jar包和 war包
- Spring Boot 把配置文件和日志文件放到jar外部