spring-boot:repackage和mvn package之间的区别

时间:2017-03-21 08:12:44

标签: java spring maven spring-boot

在阅读了Spring文档和其他一些关于Web的文章之后,我仍然感到困惑的是Spring Boot Maven插件的 spring-boot:repackage 与常规 mvn包

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

4 个答案:

答案 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(适当时)。

参考:this question's answers

答案 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 packagespring-boot:repackage完全相同,两者都会生成一个可执行jar。

如果maven插件不在您的pom中,则生成的jar将无法与mvn package一起执行(常规jar)。

spring-boot:repackage在命令行中明确指定spring-boot-maven-plugin。