使用Gradle构建 Spring Cloud项目

时间:2024-03-13 17:42:39

一、Gradle简介

1.1 介绍

官网给Gradle的一些介绍:Gradle是一个专注于灵活性和性能的开源构建自动化工具。Gradle构建脚本是使用Groovy或Kotlin DSL编写的。

  • Highly customizable(高度可定制的):Gradle以一种最基本的可定制和可扩展的方式进行建模。
  • Fast:快速级通过重用以前执行的输出、只处理更改的输入和并行执行任务来快速完成任务。
  • Powerful:Gradle是Android的官方构建工具,支持多种流行的语言和技术。

1.2 Gradle Build Language/DSL

DSL (Domain Specific Language):领域专用语言
官网:https://docs.gradle.org/current/dsl/
Gradle的实质是配置脚本,执行一种类型的配置脚本时就会创建一个关联的对象,譬如执行Build script脚本就会创建一个Project对象,这个对象其实就是Gradle的代理对象。下面给出来各种类型Gradle对应的对象类型:
使用Gradle构建 Spring Cloud项目

二、Gradle与Maven比较

Gradle抛弃了Maven的基于XML的繁琐配置,Gradle采用了领域特定语言Groovy的配置,大大简化了构建代码的行数。

  1. 依赖简洁度 : gradle更简介,不过maven的xml在它xsd文件的约束下,结合ide工具的自动提示功能,很容易查找到自己标签对以及文字,因为gradle的太过灵活,反而减弱了代码的自动提示功能。
  2. 灵活性:Gradle基于Groovy语言因此比较灵活,Maven基于XSD约束。但过于灵活也有弊端,比如:
compile 'org.mybatis:mybatis:3.4.5'
compile('org.mybatis:mybatis:3.4.5')
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.5'
compile (group: 'org.mybatis', name: 'mybatis', version: '3.4.5')

以上4中写法,对于gradle来说都是正确的,如果多人开发项目,会造成代码风格不统一的问题。

  1. Maven和Gradle对依赖项的scope有所不同。Maven中,一个依赖项有6种scope,分别是complie(默认)、provided、runtime、test、system、import。而grade将其简化为了4种,compile、runtime、testCompile、testRuntime。不过由于gradle语言有强大表现力,我们可以轻松编写代码来实现类似于provided scope的概念。

二、Gradle安装

2.1 gradle下载

地址:https://gradle.org/releases/
使用Gradle构建 Spring Cloud项目

2.2 配置环境变量

将下载好的安装包解压至固定目录,比如:C:\java\gradle-4.10.1

2.2 .1 添加变量

GRADLE_HOME :C:\java\gradle-4.10.1

2.2 .2 更改path

path中添加 :%GRADLE_HOME%\bin

2.3 验证

ctrl+R==>cmd==>gradle - v 就应该显示出对应gradle安装版本

2.3 修改gradle仓库目录

  1. 环境变量中添加:GRADLE_USER_HOME 并指定到具体仓库目录,比如用maven仓库
    使用Gradle构建 Spring Cloud项目
  2. 修改build.gradle文件添加mavenLocal

使用mavenLocal() 时Gradle默认会按以下顺序去查找本地的maven仓库:USER_HOME/.m2/settings.xml >> M2_HOME/conf/settings.xml(环境变量要加入M2_HOME)

repositories {
    mavenLocal()
}

三、搭建Spring Cloud项目

项目结构如下所示:
使用Gradle构建 Spring Cloud项目

3.1 创建Gradle父项目

使用Gradle构建 Spring Cloud项目

3.1.2 编写父项目build.gradle
group 'com.payne.study'
version = '0.0.1-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8

buildscript {
    ext {
        //定义一个变量,统一规定springboot的版本
        springBootVersion = '2.0.5.RELEASE'
        springCloudVersion = 'Finchley.SR1'
    }
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        jcenter()
        mavenCentral()
    }

    dependencies {//用来打包
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
allprojects {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        jcenter()
        mavenCentral()
    }
    //指定编码格式
    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }
}

//设定当前模块项目中的配置
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'
    //spring boot 插件
    apply plugin: 'org.springframework.boot'
    //A Gradle plugin that provides Maven-like dependency management functionality
    apply plugin: 'io.spring.dependency-management'
    dependencies {
        compile ('org.springframework.boot:spring-boot-starter-web')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    dependencyManagement {
        imports {
            //spring bom helps us to declare dependencies without specifying version numbers.
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
    jar {
        manifest.attributes provider: 'gradle'
    }
}

options.encoding = “UTF-8”:指定编码格式,这是一种方式。也可以在IDEA中,需要打开File->Other Settings->Default Settings->Gradle,在Gradle Vm Options中设置-Dfile.encoding=utf-8
mavenCentral: maven*仓库(http://repo1.maven.org/maven2/)是由Sonatype公司提供的服务,它是Apache Maven、SBT和其他构建系统的默认仓库,并能很容易被Apache Ant/Ivy、Gradle和其他工具所使用。开源组织例如Apache软件基金会、Eclipse基金会、JBoss和很多个人开源项目都将构件发布到*仓库
jcenter:https://jcenter.bintray.com )是由JFrog公司提供的Bintray中的Java仓库。它是当前世界上最大的Java和Android开源软件构件仓库。 所有内容都通过内容分发网络(CDN)使用加密https连接获取。JCenter是Goovy Grape内的默认仓库,Gradle内建支持(jcenter()仓库),非常易于在(可能除了Maven之外的)其他构建工具内进行配置。
plugins: https://plugins.gradle.org/ 可查询具体plugin插件作用
gradle注释: gradle支持 //行注释 和 /*块注释*/
subproject: 作用:配置这个项目的子项目。这个方法对这个项目的每个子项目执行给定的闭包。目标项目作为闭包的委托传递给闭包。更多详情可以看官方文档: https://docs.gradle.org/current/dsl/org.gradle.api.Project.html

3.1.3 settings.gradle

声明实例化和配置要参与构建的项目实例的层次结构所需的配置。
可以使用include(java.lang.String[])或者多个include(java.lang.String)方法向构建添加项目。

rootProject.name = 'spring-cloud-gradle'
include 'study-registry-server'
include 'study-euraka-client'

3.2 创建Euraka Server

build.gradle:

dependencies {
	compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
}

3.3 创建Euraka Client

build.gradle:

dependencies {
	compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
}

3.4 执行Gradle 命令构建

这样简单的Euraka Server和Euraka Client项目就使用gradle模式搭建好了。

gradle clean build

使用Gradle构建 Spring Cloud项目