[Spring Boot 系列教程] 构建系统

[Spring Boot 系列教程] 目录

依赖管理

在上一篇文章中,我们介绍过 Spring Boot 将会帮助我们管理依赖,实际上,Spring Boot 是通过 BOM (Bills of Materials) 的形式管理 Jar 包之间的依赖关系,对于 BOM 在此处不做过多介绍,有兴趣的可以参考官方文档Spring Boot 为我们提供了一系列的 Starter 用于依赖的管理和对框架进行默认设置,下图简单的介绍了 Starter 所做的事情:

6509682-4a62ad7fbc347d04.png
Spring Boot Starter

Maven

Maven 用户可以通过继承 spring-boot-starter-parent ,就可以轻松集成 Spring Boot。同样的,我们还是通过 在线工具 生成项目脚手架,这次我们选择构建工具为 Maven,其它的配置都和上一篇文章相同:

6509682-f5b0833e37347ca9.png
image

将项目下载到本地,解压并导入到 IDE 中,以下是工具生成的 POM 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.19.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.docs4dev.springboot</groupId>
    <artifactId>demo02</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo02</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

其中最重要的就是:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.19.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

当我们查看 spring-boot-starter-parent 时,会发现它又继承了另一个 pomspring-boot-dependencies,在这个文件中,就定义了 Spring Boot 各种依赖包的版本号:

<properties>
    <!-- Dependency versions -->
    <activemq.version>5.14.5</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <appengine-sdk.version>1.9.71</appengine-sdk.version>
    <artemis.version>1.5.6</artemis.version>
    <aspectj.version>1.8.13</aspectj.version>
    <versions-maven-plugin.version>2.2</versions-maven-plugin.version>
    <!--此处属性较多,只截取了部分,有兴趣的同学可以自行查看-->
</properties>

同时它定义了 dependencyManagement

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <version>1.5.19.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
            <type>test-jar</type>
            <version>1.5.19.RELEASE</version>
        </dependency>
    </dependencies>
    <!--省略其它-->
</dependencyManagement>

正是因为有了这些预定义数据,所以在我们使用 Spring Boot 进行开发的时候,才不用去关心各种框架之间的冲突问题。

如果我们想自行指定某个框架的依赖版本时,只需要在自己的 pom 文件中覆盖 Spring Boot 的属性即可,如:

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

当我们使用 maven 作为构建工具的时候,只需要使我们自己的 pom 继承 spring-boot-starter-parent ,就可以使用 Spring Boot 为我们提供的各种特性了。但是某些时候,我们的 pom 可能已经继承了其它的 pom,这个时候,我们还可以导入 Spring Bootspring-boot-dependencies 来实现依赖管理:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

但是此种方式将 不支持 属性覆盖,所以如果你需要修改某个依赖的版本时,需要在 dependencyManagement 中添加相关依赖以覆盖 Spring Boot 的默认配置,如:

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Spring Boot Maven 插件

同时,Spring Boot 还提供了插件来运行我们的应用:

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>

它提供了几个 maven goal

  • spring-boot:build-info:生成 Actuator 使用的构建信息文件 build-info.properties
  • spring-boot:help:展示插件的帮助信息
  • spring-boot:repackage: 在mvn package之后,再次打包可执行的 jar/war,同时保留 mvn package生成的 jar/war.origin
  • spring-boot:run: 运行 Spring Boot 程序
  • spring-boot:start:在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
  • spring-boot:stop:在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

Gradle

gradlemaven 只是配置方式稍微有些不同:

buildscript {
    ext {
        springBootVersion = '1.5.19.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'

group = 'com.docs4dev.springboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

org.springframework.boot 插件将会自动应用 Dependency Management Plugin 用于管理依赖,其它的都是基础的 gradle 配置项,在此就不做过多讲解。

结语

本篇文章介绍了如何使用 maven 以及 gradle 创建 Spring Boot 项目,在下一篇文章中,将介绍 Spring Boot 项目的打包和运行。

猜你喜欢

转载自blog.csdn.net/weixin_33974433/article/details/86932569
今日推荐