11.5. 创建可执行jar

让我们通过创建一个完全自包含,并可以在生产环境运行的可执行jar来结束示例吧!可执行jars(有时被称为胖jars “fat jars”)是包含编译后的类及代码运行所需依赖jar的存档。

可执行jars和Java:Java没有提供任何标准方式,用于加载内嵌jar文件(即jar文件中还包含jar文件),这对分发自包含应用来说是个问题。为了解决该问题,很多开发者采用”共享的”jars。共享的jar只是简单地将所有jars的类打包进一个单独的存档,这种方式存在的问题是,很难区分应用程序中使用了哪些库。在多个jars中如果存在相同的文件名(但内容不一样)也会是一个问题。Spring Boot采取一个不同的方式,允许你真正的直接内嵌jars。

为了创建可执行的jar,我们需要将spring-boot-maven-plugin添加到pom.xml中,在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>

spring-boot-starter-parent POM包含绑定到repackage目标的<executions>配置。如果不使用parent POM,你需要自己声明该配置,具体参考插件文档

保存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:1.4.1.BUILD-SNAPSHOT: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

在该目录下,你应该还能看到一个很小的名为myproject-0.0.1-SNAPSHOT.jar.original的文件,这是在Spring Boot重新打包前,Maven创建的原始jar文件。

可以使用java -jar命令运行该应用程序:

  1. $ java -jar target/myproject-0.0.1-SNAPSHOT.jar
  2. . ____ _ __ _ _
  3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  4. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  5. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  6. ' |____| .__|_| |_|_| |_\__, | / / / /
  7. =========|_|==============|___/=/_/_/_/
  8. :: Spring Boot :: (v1.3.0.BUILD-SNAPSHOT)
  9. ....... . . .
  10. ....... . . . (log output here)
  11. ....... . . .
  12. ........ Started Example in 2.536 seconds (JVM running for 2.864)

如上所述,点击ctrl-c可以温雅地退出应用。