弹簧引导:重新打包和 mvn 包之间的区别



在阅读了 Spring 文档和网络上的其他一些文章后,我仍然很困惑 Spring Boot Maven 插件的spring-boot:repackage和常规的mvn 包有什么区别。

我以为 mvn 包会创建一个包含所有依赖项的 jar,那么 Spring 使用该插件的真正原因是什么?

maven 包目标和 spring-boot:repackage 目标本质上是不同的。spring-boot 重新打包目标主要是为了使用java -jar *.jar从命令行本身制作 JAR 或 WAR 可执行文件,而maven package目标则获取编译后的代码并将其打包为其可分发的格式,例如 JAR.It 是 spring-boot 重新打包目标,它重新打包 maven 生成的 JAR,以指定主类并使用嵌入式容器使其可执行

马文套餐

  • 第一种也是最常见的方法,通过同名的POM元素为项目设置打包。一些 有效的包装值为罐子、战争、耳朵和绒球。如果没有包装 值已指定,它将默认为 jar。

  • 当一个包被定义时,每个包都包含一个目标列表,绑定到一个特定的阶段,jar 包装将绑定 构建默认生命周期阶段的以下目标: 进程资源,编译,进程测试资源,测试编译,测试,打包,安装,部署。

弹簧引导:重新包装

要包含的插件是:

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.4.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

该配置将重新打包在 Maven 生命周期的打包阶段构建的 jar 或 war。

因此,一旦 spring-boot-maven-plugin 包含在您的 pom.xml 中,它就会自动尝试重写存档以使用 spring-boot:repackage 目标使它们可执行。应使用常用的打包元素将项目配置为生成 jar 或 war(视情况而定)。

参考 : https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html

春季重新打包在Maven生命周期的打包阶段构建的罐子或战争。以下示例显示了目标目录中重新打包的 jar 以及原始 jar:

$ mvn package
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original

如果您不包含配置,则可以自行运行插件(但前提是也使用了包目标)。例如:

$ mvn package spring-boot:repackage
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original

使用链接从春季网站查看更多详细信息

> mvn 包会创建一个 jar 或 war。

Spring 启动插件获取该 jar 或 war 并重新打包它们以使它们从命令行可执行(即不需要应用程序服务器)。

从插件文档中:

"重新打包现有的 JAR 和 WAR 存档,以便可以使用 java -jar 从命令行执行它们。

最新更新