spring-boot:repackage和mvn软件包之间的区别

Sam*_*uel 15 java spring maven spring-boot

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

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

Ana*_*han 7

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

Maven包

  • 第一种也是最常见的方式是通过同名的POM元素为项目设置包装。一些有效的包装值是jar,war,ear和pom。如果未指定包装值,则默认为jar。

  • 定义一个程序包后,每个程序包都包含要绑定到特定阶段的目标列表,jar程序包将绑定以下目标以构建默认生命周期的阶段:process-resources,compile,process-test-resources,test-编译,测试,打包,安装,部署。

春季启动:重新包装

包含的插件是:

<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>
Run Code Online (Sandbox Code Playgroud)

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

因此,一旦pom.xml中包含了spring-boot-maven-plugin,它就会自动尝试使用spring-boot:repackage目标重写存档以使其可执行。您应该使用常规包装元素将您的项目配置为构建jar或war(适当时)。

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


fab*_*fas 5

Spring重新打包在Maven生命周期的打包阶段构建的jar或war。下面的示例在目标目录中显示了重新打包的jar和原始jar:

$ mvn package
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
Run Code Online (Sandbox Code Playgroud)

如果不包括配置,则可以单独运行插件(但也必须使用软件包目标)。例如:

$ mvn package spring-boot:repackage
$ ls target/*.jar
target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original
Run Code Online (Sandbox Code Playgroud)

使用链接在spring网站上查看更多详细信息

  • 抱歉,我没有明白这里的区别...所以你在这两种情况下都输出相同的输出? (2认同)