6.打包和部署应用 6.1创建可执行的JAR的Spring Boot
6.1创建可执行的JAR的Spring Boot
Spring Boot很好的是它打成的包是一个完整的应用,该应用中包含了依赖的包、资源等,让我们有能力去执行JAR。JAR文件创建之后,我们简单地使用java -jar <name>.jar的命令不可以启动应用。
这一章节,我们将继续前面的章节,让我们学习如何去创建Spring Boot Uber JAR.
6.1.1代码实现
- 让我们在项目的根目录下执行命令:gradle clean build
- 之后就会创建一个包,然后执行命令:java -jar build/libs/bookpub-0.0.1-SNAPSHOT.jar
需要注意的是,由于作者在测试类中好多测试没有通过,可能是版本不对。所以没有解决,在打包时,如果直接用gradle clean build 的话,会进行测试评估。所以笔者建议使用 gradle build -x test ,也就是将不进行测试,这样的话就可以了。
- 启动应用,你将在控制台看到如下:
6.1.2代码说明
如你所看到的,我们有能力直接去执行JAR包。所有的这些都已经编码好了,并且提供我们Spring Boot Gradle插件有部分。额外的插件添加到任务中,允许我们与Spring Boot应用一起打包,运行它和创建JAR/TAR/WAR文件等。例如,bootRun是由Spring Boot Gradle插件提供。通过执行./gradle tasks 我们可以看到完整的有效的Gradle任务。我们运行命令得到如下的结果:
上面的输出信息并不是完整的,我们执行了不相关的任务组,例如IDE/Documentation等,但是你将会在控制台上看到它们。在任务列表中,我们将会看到bootRun/bootRepackaget等其它任务。这些任务是由Spring Boot Gradle插件添加的,为了生成合适的Spring Boot应用或启动它。你可以使用./gradle tasks –all看到实际任务的依赖,这不仅仅是有效的任务,也是内部的任务和任务之间的依赖。例如,当我们运行创建任务,下面的依赖任务将会被执行:
你可以看到创建任务将会调用bootRepackage去创建Uber JAR的文件。
这个插件也提供给我们大量的配置操作,一面我人提两个:
第一个配置是允许我们配置JAR文件的classifier来创建一个不变的JAR包含仅仅是应用代码和分开的执行JAR。也就是,说,在打包之后给包名加上自己想要的信息。如:book-0.0.1-SNAPSHOT-exe.jar名,可以这样配置:
bootBoot {
classifier = 'exec'
}
另外一个配置是允许我们指定哪个依赖JRAs要求卸载。由于一些原因,有些包不能作为嵌套的JARs的包。当你需要一些事情在System Classloader中是有效时,如通过开始系统配置如下来使SecurityManager有效:
springBoot { |
在这个例子中,包含了来自org.group的some-artifact的JAR将会嵌入到主要的JAR中与Spring Boot 编码和应用编码一起。