通过创建一个完全独立的可执行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-parentPOM包括<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。
