弹簧启动:重新包装和mvn包装的区别

2022-09-01 06:13:21

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

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


答案 1

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

Maven Package

  • 第一种也是最常见的方法,通过同名的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


答案 2

Spring重新包装在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

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


推荐