11.5 Creating an Executable Jar
我们通过创建一个可以在生产中的完全独立的可执行jar文件来完成我们的示例.可执行jar(有时称为富jars)是包含您的编译后的类文件存档,以及您的代码运行需要的所有jar依赖项。
Executable jars and Java
Java没有提供加载内嵌jar文件的标准方法(jar文件本身包含在一个jar中).如果您希望分发一个独立的应用程序,这可能会有问题.
为了解决这个问题,许多开发人员使用了uberjar。一个uber jar将所有应用程序依赖项的所有类打包成一个归档文件.这种方法的问题在于,很难区分应用程序中有哪些库.
如果在多个jar中使用相同的文件名(但使用不同的内容),也会有问题.
Spring Boot采用了一种不同的方法,让您可以直接内嵌jar.
为了创建可执行jar包,我们必须在项目的pom.xml
中添加spring-boot-maven-plugin
插件.要做到这一点,请在dependencies
节点下增加以下几行:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Note
spring-boot-starter-parent
POM可通过包含<executions>
配置去绑定repackage
目标。如果您不使用父POM,您需要自己声明这个配置.有关详细信息,请参见plugin documentation.
保存您的pom.xml
并从命令行运行mvn package
,如下所示:
$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.0.2.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
查看你的target
文件夹,你应该能看到myproject-0.0.1-SNAPSHOT.jar
文件.该文件大小应该在10MB左右.如果你想查看具体包含的文件,可通过jar tvf
命令,如下:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
在target
文件夹下,你应该还能看到一个容量小多了的名为myproject-0.0.1-SNAPSHOT.jar.original
文件.该文件为Spring Boot重新打包前由Maven创建的原始jar文件.
为了运行插件打包后的应用,使用java -jar命令,如下:
跟之前一致,退出程序请按ctrl-c
.