在阅读了Spring文档和其他一些关于Web的文章之后,我仍然感到困惑的是Spring Boot Maven插件的 spring-boot:repackage 与常规 mvn包
我认为mvn包创建了一个包含所有依赖项的jar,那么Spring使用该插件的真正原因是什么?
答案 0 :(得分:3)
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网站的详细信息答案 1 :(得分:1)
mvn包创建一个jar或战争。
spring boot插件接受jar或war并重新打包它们以使它们可以从命令行执行(即不需要app服务器)。
来自插件文档:
“重新打包现有的JAR和WAR存档,以便可以使用java -jar从命令行执行它们。”
答案 2 :(得分:1)
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。
因此,一旦pom.xml中包含了spring-boot-maven-plugin, 它将自动尝试使用spring-boot:repackage目标重写归档文件以使其可执行。 。您应该使用常规包装元素将您的项目配置为构建jar或war(适当时)。
答案 3 :(得分:-2)
如果pom中显示有spring-boot-maven-plugin,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后命令mvn package
与spring-boot:repackage
完全相同,两者都会生成一个可执行jar。
如果maven插件不在您的pom中,则生成的jar将无法与mvn package
一起执行(常规jar)。
spring-boot:repackage
在命令行中明确指定spring-boot-maven-plugin。