专栏首页JavaQ深入Spring Boot (二):Spring Boot对构建系统的支持

深入Spring Boot (二):Spring Boot对构建系统的支持

Spring Boot强烈建议开发者在使用Spring Boot的时候选择支持依赖管理的构建系统,以获取更好的使用支持,比如Maven或Gradle。因为Maven和Gradle的实现不同,所以Spring Boot对它们的使用支持也不同。

Maven

每次Spring Boot新版本发布时都会提供一个它所支持的Spring模块及第三方库版本列表,例如Spring Boot1.5.10版本支持的库列表可以在https://github.com/spring-projects/spring-boot/blob/v1.5.10.RELEASE/spring-boot-dependencies/pom.xml上查询,。因为Spring Boot每次版本发布都会关联一个Spring库的基础版本,所以官方强烈不建议自己指定Spring库版本。

新建项目可以使用Maven通过继承spring-boot-starter-parent项目来获取合适的默认设置,即在pom.xml中添加如下配置。

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.10.RELEASE</version>

</parent>

查看spring-boot-starter-parent项目的pom.xml文件,可以看到它继承了spring-boot-dependencies项目,也就是说新建项目间接继承了spring-boot-dependencies项目。

从上图可以发现spring-boot-starter-parent项目配置了默认代码编码为UTF-8、编译级别为Java1.6,这样的配置同样作用于继承它的项目。

查看spring-boot-dependencies项目的pom.xml文件,可以看到文件中配置了很多依赖库的版本定义,也就是说在新建项目的pom.xml中添加这些依赖可以省略版本号配置,例如添加activemq-client依赖。

继续查看spring-boot-starter-parent项目的pom.xml文件,可以看到它配置了构建时对application.properties和application.yml的筛选。

同样在spring-boot-starter-parent项目的pom.xml文件也配置了可用插件。

所以,综上可以看出继承spring-boot-starter-parent项目可以获取以下默认特性:

1.默认使用Java1.6进行编译;

2.默认代码编码为UTF-8;

3.新建项目的pom文件可以省略依赖库的<version>标签,例如添加activemq依赖的时候,可以不写版本号;

4.恰到好处的资源过滤;

5.恰到好处的插件配置,如exec插件;

6.恰到好处的对application.properties和application.yml进行筛选;

通过继承的方式可以很方便的进行依赖版本管理,即使用默认的依赖版本,当然也可以更改这些依赖的版本号,例如要想升级activemq到5.15.0版本,可以在新建项目的pom.xml中添加如下配置。

<properties>

<activemq.version>5.15.0</activemq.version>

</properties>

不是每个人都喜欢使用继承spring-boot-starter-parent项目方式,或者公司有自己的标准parent,所以也可以选择不继承spring-boot-starter-parent项目,但是你又想继续使用依赖管理的特性,可以将如下配置添加到新建项目的pom.xml中。

<dependencyManagement>

<dependencies>

<dependency>

<!-- Import dependency management from Spring Boot -->

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>1.5.10.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

其实就是把spring-boot-dependencies项目pom.xml中的配置导入到新建项目的pom.xml中。如果此时要想升级activemq到5.15.0版本,需要在项目的dependencyManagement节点中,在spring-boot-dependencies实体前插入一个dependency 节点,具体配置如下。

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-client</artifactId>

<version>5.15.0</version>

<scope>import</scope>

<type>pom</type>

</dependency>

<dependency>

<!-- Import dependency management from Spring Boot -->

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>1.5.10.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

Gradle

Spring Boot对Gradle的使用支持非常友好,使用Gradle可以直接在它的dependencies节点处添加需要的starters。跟Maven不同的是,没有"parent"配置,也就不能共享配置。但是,Spring Boot提供的spring-boot插件也提供了依赖管理的能力,它允许你省略Spring Boot管理的任何依赖的version版本号,例如如下配置。

plugins {

id 'org.springframework.boot' version '1.5.10.RELEASE'

id 'java'

}

group 'myproject'

version '1.0-SNAPSHOT'

repositories {

jcenter()

}

dependencies {

compile("org.springframework.boot:spring-boot-starter-web")

testCompile("org.springframework.boot:spring-boot-starter-test")

}

当需要更改这些依赖的默认版本号时也很简单,只需要添加版本号即可,例如升级activemq到5.15.0版本配置如下。

dependencies {

compile("org.springframework.boot:spring-boot-starter-web")

compile("org.apache.activemq:activemq-client:5.15.0")

testCompile("org.springframework.boot:spring-boot-starter-test")

}

总结

虽然Spring Boot对Maven和Gradle都做了很好的支持,但是从上面介绍可以看出使用Gradle相对Maven简便很多,所以如果你在犹豫使用哪一个构建工具,推荐使用Gradle。

END

如果觉得有收获,记得关注、点赞、转发。

本文分享自微信公众号 - JavaQ(Java-Q),作者:wind瑞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HashMap在JDK1.8前后区别精简说

    在JDK1.8以前版本中,HashMap的实现是数组+链表,它的缺点是即使哈希函数选择的再好,也很难达到元素百分百均匀分布,而且当HashMap中有大量元素都存...

    JavaQ
  • MySQL存储引擎InnoDB和MyISAM对比总结(更新)

    本篇内容对MySQL两个主要存储引擎InnoDB和MyISAM进行对比总结。 InnoDB引擎 InnoDB是一个事务型的存储引擎,设计目标是处理大数量数据时提...

    JavaQ
  • Guava之Ordering

    Ordering类提供了一些链式的排序方法,相比JDK自带的排序方法更加简练、方便。 Ordering中有3种静态方法用于创建Ordering排序器: ? 根据...

    JavaQ
  • 《javascript高级程序设计》核心知识总结

    浮点数值的最高精度是17位小数,但在进行算术计算时精度远远不如整数。例如 0.1 + 0.2 === 0.300000000000004(大致这个意思,具体多少...

    徐小夕
  • AndroidStudio安装SVN遇到的坑爹的问题Can't use Subversion command line client

    在把项目从EC上搬到AS上遇到了一个奇葩的SVN问题,搞了好久才搞好。真是日了dog了!

    acoolgiser
  • 【董天一】什么是IPFS?(一)

    写在前面: 今天先写到这里,关于IPFS的所有事情小编都想快点告诉大家,但毕竟精力有限,小编尽量抽出时间提供更多的关于IPFS的信息。

    圆方圆学院
  • 面试定心丸:AI知识点备忘录(包括ML、DL、Python、Pandas等)

    【导读】本期 AI科技大本营为大家精心整理了最全面的 AI 知识点备忘清单,包含机器学习、深度学习、Python 等各个领域。为了方便大家保存和随时学习,我们还...

    AI科技大本营
  • python学习笔记---列表

        l.index(value):返回值为value的元素第一次在list出现的位置

    py3study
  • 数字IC验证系列之层次化TLM连接

    (题目改为事务级与信号级的分工协作) UVM验证平台一直在努力降低组件之间的耦合度,拆分那些处理多项任务的组件,只处理单个任务,使各个组件更容易调试和复用。

    AsicWonder
  • Safari常用快捷键

    青木

扫码关注云+社区

领取腾讯云代金券