通过创建一个完全独立的可执行jar文件来结束示例,这个jar可以在生产环境中运行。可执行jar(有时称为“胖jar”)包含已编译的类和代码运行需要的所有jar依赖项的归档文件。
可执行jar和Java Java没有提供加载嵌套jar文件(jar中本身包含的jar文件)的标准方法。如果您要分发独立的应用程序,则可能会出现问题。 为了解决这个问题,许多开发人员使用“超级(uber)”jar。超级jar将来自应用程序所有依赖项的所有类打包到单个存档文件中。这种方法的问题在于,很难查看应用程序中包含哪些库。如果在多个jar中使用相同的文件名(但具有不同的内容),也可能会产生问题。 Spring Boot采用了另一种方法,实际上允许您直接嵌套jar。
要创建可执行jar,我们需要将添加spring-boot-maven-plugin
到pom.xml
。为此,请在dependencies
部分下方插入以下行:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent
POM包括<executions>
配置以结合repackage
目标。如果不使用父POM,则需要自己声明此配置。有关详细信息,请参见插件文档。
保存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.4.0-SNAPSHOT:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果查看target
目录,则应该看到myproject-0.0.1-SNAPSHOT.jar
文件。该文件的大小应为10 MB左右。如果您想窥视内部的内容,可以使用jar tvf
命令,如下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
您还应该在target
目录中看到一个更小的名叫myproject-0.0.1-SNAPSHOT.jar.original
文件。这是Maven在Spring Boot重新打包之前创建的原始jar文件。
要运行该应用程序,请使用以下java -jar
命令:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
和以前一样,要退出该应用程序,请按ctrl-c
。