我们通过创建一个可以在生产中运行的完全独立的可执行 jar 文件来完成我们的示例。可执行 jars(有时称为“fat jars”)是包含已编译类以及代码需要运行的所有 jar 依赖项的存档。
Java 不提供加载嵌套 jar 文件(本身包含在 jar 中的 jar 文件)的标准方法。如果您希望分发一个独立的应用程序,这可能会出现问题。
为了解决这个问题,许多开发人员使用“超级”罐子。一个 uber jar 将所有应用程序依赖项中的所有类打包到一个存档中。这种方法的问题是很难看到应用程序中有哪些库。如果在多个 jar 中使用相同的文件名(但内容不同),也可能会出现问题。
Spring Boot 采用了不同的方法,让您实际上可以直接嵌套 jar。
spring-boot-maven-plugin要创建一个可执行的 jar,我们需要将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.6.7: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
myproject-0.0.1-SNAPSHOT.jar.original您还应该在目录中看到一个小得多的文件target。这是Maven在被Spring Boot重新打包之前创建的原始jar文件。
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.7) ....... . . . ....... . . . (log output here) ....... . . . ........ Started MyApplication in 2.536 seconds (JVM running for 2.864)