Java Gradle的安装与使用

一、Gradle介绍

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。

面向Java应用为主, 支持maven。和maven一样,都是当前热门的自动化构建工具。

优点:

  1. 一种可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置)

  2. 强大的支持多工程的构建

  3. 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建你的工程

  4. 全力支持已有的Maven或者Ivy仓库基础建设

  5. 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下

  6. 基于groovy脚本构建,其build脚本使用groovy语言编写

  7. 具有广泛的领域模型支持你的构建

二、Gradle的下载与安装

2.1Gradle下载

下载地址:https://docs.gradle.org/current/userguide/installation.html#installing_manually

在这里插入图片描述

选择版本,点击binar-only下载。

在这里插入图片描述

2.2Gradle安装

0.Gradle安装条件:jdk1.8及以上。

1.解压gradle-7.1-all.zip 到任意目录下

G:\gradle\gradle-7.1

2.配置环境变量

我的电脑->属性->高级->环境变量->新建系统变量

变量名:GRADLE_HOME
变量值:G:\gradle\gradle-7.1

如图:

在这里插入图片描述

添加 %GRADLE_HOME%\bin 到 Path 系统变量中 :

在这里插入图片描述

2.3修改Gradle本地仓库位置

由于没有办法像Maven一样配置Setting文件来修改本地库的位置,我们可以通过设置环境变量GRADLE_USER_HOME的路径来改变gradle的本地仓库的位置。 gradle也是可以使用maven的仓库的 。

我的电脑->属性->高级->环境变量->新建系统变量

在这里插入图片描述

2.4Gradle安装完验证

运行cmd,输入命令: gradle -v

显示如下表示成功。

在这里插入图片描述

三、创建gradle项目

1.新建Gradle项目

使用工具:idea+jdk8

新建项目->选择Gradle ->点击next->填写项目名->点击Finish

在这里插入图片描述

在这里插入图片描述

2.配置Gradle环境

刚创建完一个项目,默认使用wrapper下的gradle版本。

在这里插入图片描述

我们使用本机的gradle版本,如下idea配置:

点击File->setting->搜索gradle->修改配置如下

在这里插入图片描述

3.引入springboot插件

plugins {
id 'org.springframework.boot' version '2.3.7.RELEASE' //维护springboot版本号,不单独使用,和下面两个插件一起用
id 'io.spring.dependency-management' version '1.0.10.RELEASE' //进行依赖管理,在引入其它boot依赖时省略版本号、解决jar包冲突问题
id 'java' }

springframework:指定springboot的版本并依赖jar包
dependency-management :进行依赖的版本的管理;(以后引入相关依赖就无需写版本号)

在这里插入图片描述

4.引入相关依赖

dependencies {
implementation 'org.springframework.boot:spring-boot-starter' 
implementation 'org.springframework.boot:spring-boot-starter-web' //省略版本,原生bom支持,插件management提供testImplementation('org.springframework.boot:spring-boot-starter-test')
}
test {useJUnitPlatform()
}

在这里插入图片描述

然后刷新gradle自动导入相关依赖。

5.创建controller层

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: shen
 * @CreateTime: 2022-01-07  10:22
 * @Description: controller层
 */
@RestController
@RequestMapping("/actor")
public class ActorController {

    @GetMapping("/hi")
    public String hi(){
        return "nihao,xiaoshen";
    }
}

6.创建springboot启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author: shen
 * @CreateTime: 2022-01-07  10:25
 * @Description: 启动类
 */
@SpringBootApplication
public class GradleApplication {
    public static void main(String[] args) {
        SpringApplication.run(GradleApplication.class,args);
    }
}

7.启动Gradle项目

要想运行当前 Springboot 项目,直接执行 gradle bootRun 指令或者 idea 右侧按钮即可。

当然如果想让当前项目打成可执行 jar 包,只需执行: gradle bootJar 指令即可。

在这里插入图片描述

8.测试

测试:localhost:8080/actor/hi

在这里插入图片描述
jar包:
在这里插入图片描述

四、build.gradle详解

一个项目中只放置一个build.gradle, 指定依赖信息的配置中心。这个文件中的模块分为如下几个模块:

属性:

属性名所属说明
groupproject
versionproject项目版本(全局的)
name(artifact)project一般写在settings.gradle
sourceCompatibility = 1.8java插件
targetCompatibility = 1.8java插件
compileJava.options.encoding = ‘UTF-8’
compileTestJava.options.encoding = ‘UTF-8’

方法:

方法说明
apply应用
repositories添加仓库
dependencies添加依赖
buildscript
allprojects
subprojects
configurations

1.group和version

本属性指定了本gradle工程所属的组和版本号 。

group 'org.example'
version '1.0-SNAPSHOT'

2.apply

apply plugin: 'java'

3.sourceCompatibility

本属性定义了源码语法使用的java级别。

sourceCompatibility = 1.8

4.repositories 方法

指定所使用的仓库 ,格式如下:

repositories{
    mavenLocal() 优先从本地获取依赖
    mavenCentral()
}

mavenCentral() 表示使用maven的中央仓库,此刻项目中所需要的jar报都会默认从中央仓库下载到本地指定目录中。

5.dependencies 方法

gradle工程中,所有的jar包坐标都在dependencies 属性中放置。每一个jar的坐标都有三个基本元素组成(groupId, name, version,类似于maven的坐标)。

dependencies {
    //单个依赖
    implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.73'
    //单个依赖简写
    implementation 'com.alibaba:fastjson:1.2.73'
    //多个依赖
    implementation 'com.alibaba:fastjson:1.2.73', 'log4j:log4j:1.2.17'
    //闭包依赖,为了添加额外配置
    implementation("org.mybatis:mybatis:3.5.6"){
        exclude group :"org.springframework",module:"spring"
        exclude group :"org.javassist",module:"javassist"
        exclude group :"org.jboss.netty",module:"netty"
    }
    //双引号方式使用变量,在ext中声明或 def 关键字声明变量 lombok_version=具体版本
    annotationProcessor "org.projectlombok:lombok:$lombok_version"
    compileOnly "org.projectlombok:lombok:${lombok_version}"
}
说明
compile/testCompile //deprecatedimplementation/testImplementationcompile在3.x及之后依然能用。
compileOnly/testCompileOnly只在编译时有效,不会参与打包
compileClasspathtestCompileClasspath继承自:compile, compileOnly, implementation继承自:testCompile, testCompileOnly, testImplementation
annotationProcessor使能注解处理器。比如:lombok就要到。
runtime/testRuntime //deprecatedruntimeOnly/testRuntimeOnly编译时不会参与,很少用
runtimeClasspathtestRuntimeClasspath继承自:runtimeOnly, runtime, implementation继承自:testRuntimeOnly, testRuntime, testImplementation
archivesuploadArchives任务会用到
default继承自:runtimeClasspath

6.buildscript{}

buildscript{}必须放在最上面, gradle在执行脚本时,会优先执行buildscript代码块中的内容,然后才会执行剩余的build脚本。

buildscript {
    ext {
        springBootVersion = '2.1.1.RELEASE'
        lombokVersion = '1.18.10'
    }
    repositories {
    	...
    }
    
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
    apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
 
group = 'abcd'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
 
ext['springCloudVersion'] = 'Greenwich.RC2'
 
dependencies {
  //Spring Boot
  compile('org.springframework.boot:spring-boot-starter')
  //Spring MVC
  compile('org.springframework.boot:spring-boot-starter-web')
  compile('org.springframework.boot:spring-boot-starter-aop')
  compile("org.projectlombok:lombok:${lombokVersion}")
}
 
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }

五、项目问题

1.编译乱码处理

//在 build.gradle 增加以下配置
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

2.跳过测试编译

//在 build.gradle 增加以下配置
gradle.taskGraph.whenReady {
    tasks.each { task ->
        if (task.name.contains("test")) {
            task.enabled = false
        }
    }
}

3. 发布私服

//在 build.gradle 增加以下配置
// 1.私服账号密码
buildscript {
    ext {
        nexusUsername = 'admin'
        nexusPassword = '12345'
    }
}
// 2.配置分组,版本号
group 'org.example'
version '1.0.0'
// 3.配置maven插件
plugins {
    id 'maven'
}

//发布私服,包名为文件 settings.gradle 中 rootProject.name 配置的名称,版本为上文配置的 verison 版本号
uploadArchives {
    repositories {
        mavenDeployer {
        	//这里配置自己的私服地址
            repository(url: "") {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
            //这里配置自己的私服地址
            snapshotRepository(url: "") {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
        }
    }
}

执行发布
方式1:使用命令在根目录下执行 > gradle uploadArchives
方式2:使用编译器右边的插件列表执行发布:upload

4. 发布本地

//在 build.gradle 增加以下配置
// 1.配置分组,版本号
group 'com.alone.demo'
version '0.0.1-SNAPSHOT'
// 3.配置maven插件
plugins {
    id 'maven-publish'
}

//发布本地,包名为文件 settings.gradle 中 rootProject.name 配置的名称,版本为上文配置的 verison 版本号
publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

使用idea右边插件列表执行发布:publishing

5. 依赖冲突

1.通过配置全局排除冲突包(全局封杀),如:

//方式一
configurations {
    all{
        exclude group :"org.springframework.boot",module:"spring-boot-starter-logging"
    }
}

//方式二 简写
configurations.all*.exclude module: "spring-boot-starter-logging"

2.排除冲突的依赖,例如

dependencies {
    implementation("org.mybatis:mybatis:3.5.6"){
        exclude group :"org.springframework",module:"spring"
        exclude group :"org.jboss.netty",module:"netty"
    }
}

3.强制指定版本策略,即在发生冲突时使用指定的版本,如:

/冲突失败策略设置
configurations.all {
    resolutionStrategy {  failOnVersionConflict() }
}
//强制指定版本策略设置
dependencies {
	//方式一 闭包
    implementation ("io.netty:netty-all:4.0.44.Final"){
        force true
    }
    //方式二 简写
    implementation group: 'io.netty', name: 'netty-all', version: '4.0.44.Final', force: true

4.使用动态依赖

dependencies {
    //方式一:指定某个版本以上,减小发生版本冲突的几率。如以下依赖选择 3 以上任意一个版本
    implementation 'cn.afterturn:easypoi-base:3.+'
    // 方式二:选择最新的版本
    implementation 'cn.afterturn:easypoi-base:latest.integration'
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值