spring-boot:repackage 和 mvn package 的区别
Posted
技术标签:
【中文标题】spring-boot:repackage 和 mvn package 的区别【英文标题】:Difference between spring-boot:repackage and mvn package 【发布时间】:2017-08-12 18:53:27 【问题描述】:在阅读了 Spring 文档和网络上的其他一些文章后,我仍然很困惑 Spring Boot Maven 插件的 spring-boot:repackage 和常规 mvn 包 有什么区别>.
我认为 mvn package 创建了一个包含所有依赖项的 jar,那么 Spring 使用该插件的真正原因是什么?
【问题讨论】:
I've thought that mvn package creates a jar with all dependencies included
。
在@Tome 的响应中添加:“..除非您的 POM 是 spring-boot-starter-parent
的子级”,在这种情况下,mvn package
将运行 spring-boot:repackage
目标,从而创建胖 JAR。
【参考方案1】:
Spring 重新打包在 Maven 生命周期的打包阶段构建的 jar 或 war。以下示例显示了目标目录中重新打包的 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
使用link查看spring网站的更多细节
【讨论】:
如果使用<packaging>jar</packaging>
指令,可以生成可执行的自给自足jar:java -jar target/mymodule-0.0.1-SNAPSHOT.jar
对不起,我没有在这里得到区别......所以你在两种情况下都输出相同的输出?【参考方案2】:
mvn 包创建一个 jar 或 war。
spring boot 插件获取该 jar 或 war 并重新打包它们以使它们可以从命令行执行(即不需要应用服务器)。
来自插件文档:
“重新打包现有的 JAR 和 WAR 档案,以便可以使用 java -jar 从命令行执行它们。”
【讨论】:
好的,所以我认为这也是通过常规包完成的。我现在是否正确,您不能只是 java -jar 一个常规包?为了使其可执行,该常规包还应该做什么? spring-boot 插件究竟对那个常规包做了什么?如果我看起来很困惑,我很抱歉,我只是没有从他们的文档中理解它。【参考方案3】:maven 包目标和 spring-boot:repackage 目标在本质上是不同的。 spring-boot 重新打包目标主要是使用java -jar *.jar
从命令行本身制作一个JAR 或WAR 可执行文件,而maven package
目标将编译后的代码打包成可分发的格式,例如JAR。它是spring-boot 重新打包目标,重新打包 maven 生成的 JAR 以指定主类并使用 嵌入式容器 使其可执行 。
Maven 包
通过同名的 POM 元素为项目设置打包的第一种也是最常用的方法。某些 有效的包装值为 jar、war、ear 和 pom。如果没有包装 值已指定,默认为jar。
当一个包被定义时,每个包都包含一个绑定到特定阶段的目标列表,jar包将绑定 以下目标来构建默认生命周期的各个阶段: 流程资源,编译,流程测试资源,测试编译,测试,打包,安装,部署。
Spring-boot:repackage
要包含的插件是:
<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
【讨论】:
以上是关于spring-boot:repackage 和 mvn package 的区别的主要内容,如果未能解决你的问题,请参考以下文章
python累计求和,编写一个程序,从键盘输入两个整数m和n,求m和n之间(包括m和n)