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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/github_39939645/article/details/86602347

依赖管理

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

Spring Boot Starter

Maven

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

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 项目结构和自动配置机制。

展开阅读全文

没有更多推荐了,返回首页