创建 Spring Boot 应用,默认会添加 Maven 插件:spring-boot-maven-plugin。如果项目结构比较简单,可以不用额外配置,使用默认的编译打包就可以。
执行 maven 打包命令时会自动触发 spring-boot-maven-plugin 插件的 repackage 目标,完成后会在 target 目录下生成两个 jar,如下图:
命令执行后会在创建的 target 目录中会生成 2 个文件:
- *.jar:可执行 jar,包含 pom 中的所有依赖,可直接用 java -jar 命令执行。
- *.jar.original:是 Maven 在 Spring Boot 重新打包(repackage)之前创建的原始 jar文件,只有少量的用户类,不包含依赖。
执行 打包命令后,先是执行的 mvn 常规操作,创建普通 jar包,然后 spring boot repackage 将其重新命名为 *.jar.original 原始包, 在原始包的基础上添加项目依赖和起动类,最后打成可执行的 jar包。
pom.xml配置如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot-dependencies.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
默认情况下,repackage 目标将用重新打包的包替换原始原包。
若项目结构比较复杂,如父子结构、多层结构或通过命令动态指定打包方式等,就需要额外的配置支持。
Goals 作用
- build-info:根据当前 MavenProject 的内容生成一个build-info.properties文件。
- help:显示帮助信息。调用mvn spring-boot:help -Ddetail=true -Dgoal=以显示参数详细信息。
- repackage:默认的值,重新打包现有的 JAR 和 WAR 包,以便可以使用 java -jar 命令行来运行。使用 layout = NONE也可以简单地用于打包具有嵌套依赖关系的 JAR(并且没有主类,因此不是可执行文件)。简单的说就是生成可执行的jar包或war包。
- run:运行一个可执行的应用
- start:启动 Spring 应用程序。 与run目标相反,这不会阻止并允许其他目标在应用程序上运行。此目标通常用于集成测试方案中,在该方案中,应用程序在测试套件之前启动,然后在测试套件之后停止。
- stop:停止已由 start 目标启动的 Spring 应用程序。 通常在测试套件完成后调用。