11.5 Creating an Executable Jar

我们通过创建一个可以在生产中的完全独立的可执行jar文件来完成我们的示例.可执行jar(有时称为富jars)是包含您的编译后的类文件存档,以及您的代码运行需要的所有jar依赖项。

  1. Executable jars and Java
  2. Java没有提供加载内嵌jar文件的标准方法(jar文件本身包含在一个jar中).如果您希望分发一个独立的应用程序,这可能会有问题.
  3. 为了解决这个问题,许多开发人员使用了uberjar。一个uber jar将所有应用程序依赖项的所有类打包成一个归档文件.这种方法的问题在于,很难区分应用程序中有哪些库.
  4. 如果在多个jar中使用相同的文件名(但使用不同的内容),也会有问题.
  5. Spring Boot采用了一种不同的方法,让您可以直接内嵌jar

为了创建可执行jar包,我们必须在项目的pom.xml中添加spring-boot-maven-plugin插件.要做到这一点,请在dependencies节点下增加以下几行:

  1. <build>
  2.  <plugins>
  3.   <plugin>
  4.    <groupId>org.springframework.boot</groupId>
  5.    <artifactId>spring-boot-maven-plugin</artifactId>
  6.   </plugin>
  7.  </plugins>
  8. </build>

Note

spring-boot-starter-parent POM可通过包含<executions>配置去绑定repackage目标。如果您不使用父POM,您需要自己声明这个配置.有关详细信息,请参见plugin documentation.

保存您的pom.xml并从命令行运行mvn package,如下所示:

  1. $ mvn package
  2. [INFO] Scanning for projects...
  3. [INFO]
  4. [INFO] ------------------------------------------------------------------------
  5. [INFO] Building myproject 0.0.1-SNAPSHOT
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] .... ..
  8. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
  9. [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
  10. [INFO]
  11. [INFO] --- spring-boot-maven-plugin:2.0.2.RELEASE:repackage (default) @ myproject ---
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] BUILD SUCCESS
  14. [INFO] ------------------------------------------------------------------------

查看你的target文件夹,你应该能看到myproject-0.0.1-SNAPSHOT.jar文件.该文件大小应该在10MB左右.如果你想查看具体包含的文件,可通过jar tvf命令,如下:

  1. $ 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.