spring-boot-starter-parent和spring-boot-dependencies有什么区别?

2,547 阅读1分钟

我正在参加「掘金·启航计划」

以2.3.7.RELEASE为例

spring-boot-starter-parent

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.7.RELEASE</version>
  <relativePath/>
</parent>

继承了spring-boot-dependencies

其内部首先是继承了spring-boot-dependencies

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.7.RELEASE</version>
  </parent>

所以很明显是包含关系了。

定义了一些属性

<properties>
    <java.version>1.8</java.version>
    <resource.delimiter>@</resource.delimiter>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>
  • java.version 被用于指定编译时源文件和目标文件的 java 版本
  • resource.delimiter定义了占位符,可以用来在资源文件application.properties里通过@...@来引用maven中定义的变量,详见官方文档,比如
app.encoding=@project.build.sourceEncoding@
app.java.version=@java.version@
  • maven.compiler.source定义了maven编译的版本
  • project.build.sourceEncoding定义了项目源码编码格式为UTF-8

定义了打包时的资源过滤

<resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/application*.yml</include>
          <include>**/application*.yaml</include>
          <include>**/application*.properties</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
          <exclude>**/application*.yml</exclude>
          <exclude>**/application*.yaml</exclude>
          <exclude>**/application*.properties</exclude>
        </excludes>
      </resource>
    </resources>

打包插件的管理

maven-compiler-plugin kotlin-maven-plugin maven-failsafe-plugin maven-jar-plugin maven-war-plugin maven-resources-plugin git-commit-id-plugin spring-boot-maven-plugin,定义了可执行jar包的配置

<plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <executions>
            <execution>
              <id>repackage</id>
              <goals>
                <goal>repackage</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <mainClass>${start-class}</mainClass>
          </configuration>
        </plugin>

maven-shade-plugin

spring-boot-dependencies

而spring-boot-dependencies依赖里,只负责管理其他依赖的版本。

总结

也就是说,如果你只想管理依赖版本,其他打包的内容自己管理、配置,你可以只引用spring-boot-dependencies,否则,你需要引用spring-boot-starter-parent。