# Gradle 在开发中的使用

概述

Gradle 是一种开源构建自动化工具,其设计足够灵活,几乎可以构建任何类型的软件。以下是其一些最重要功能的高级概述:

高性能

Gradle 通过只运行需要运行的任务来避免不必要的工作,因为它们的输入或输出发生了变化。您还可以使用构建缓存来重用来自先前运行或什至来自不同机器(具有共享构建缓存)的任务输出。

JVM基础

GradleJVM 上运行,您必须安装 Java 开发工具包 (JDK) 才能使用它。这对于熟悉 Java 平台的用户来说是一个好处,因为您可以在构建逻辑中使用标准 Java API,例如自定义任务类型和插件。它还可以轻松地在不同平台上运行 Gradle

公约

Gradle 借鉴了 Maven 的书,并通过实现约定使常见类型的项目(例如 Java 项目)易于构建。应用适当的插件,您可以轻松地为许多项目创建精简的构建脚本。但是这些约定并不限制您:Gradle 允许您覆盖它们,添加您自己的任务,并对基于约定的构建进行许多其他自定义。

可扩展性

​ 可以轻松扩展 Gradle 以提供您自己的任务类型甚至构建模型。

IDE支持

​ 几个主要的 IDE 允许导入 Gradle 构建并与之交互。

洞察力

​ 构建扫描提供有关构建运行的大量信息,您可以使用这些信息来识别构建问题。它们特别擅长帮助您识别构建性能的问题。您还可以与他人共享构建扫描,这在您需要寻求建议以解决构建问题时特别有用。


安装
  • Gradle 可在所有主要操作系统上运行,并且只需要Java 8 或更高版本即可运行。

  • Gradle 附带了自己的 Groovy 库,因此不需要安装 GroovyGradle 会忽略任何现有的 Groovy 安装。

  • Gradle 使用它在路径中找到的任何 JDK

  • 下载Gradle配置环境变量。

针对 gradle 下载 jar 包很慢进行配置
  • 只对当前项目进行配置,找到对应工程的build.gradle将拉去jar包的镜像地址换成阿里云的仓库。
repositories {
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    mavenCentral()
}
  • 配置全局的配置,在C:\Users\用户\.gradle这个文件夹下新建 init.gradle文件,加上以下配置
allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
            }
        }
        maven {
            url ALIYUN_REPOSITORY_URL
            url ALIYUN_JCENTER_URL
        }
    }
}
使用 Gradle 编译工程是控制台输出报错内容,中文乱码

请添加图片描述

  • 编辑 Help > Edit Custom VM Options 增加 -Dfile.encoding=UTF-8,增加后重启IDEA生效

Gradle 创建多个项目依赖

Gradle 中的多项目构建由一个根项目和一个或多个子项目组成。

项目布局
------------------------------------------------------------
Root project 'gradle-project'
------------------------------------------------------------

Root project 'gradle-project'
+--- Project ':gradle-project-one'
+--- Project ':gradle-project-three'
\--- Project ':gradle-project-two'

  • 请注意,根项目没有 Gradle 构建文件,只有定义要包含的子项目的设置文件。
rootProject.name = 'gradle-project'

include 'gradle-project-one'
include 'gradle-project-two'
include 'gradle-project-three'

Gradle 中 api、implementation 和 compile 的区别
  • 在 3.0 后,废弃了 compile,使用 implementationapi 来代替。api 等同于 compile,意思是:我会把你暴露给第三方。implementation 意思是:我不会把你暴露给第三方。
  • 举个简单的例子:DemoOne依赖DemoTwoDemoTwo依赖DemoThree。如果使用compile那么DemoOne能直接访问DemoThree中的类,使用implementation无法访问到DemoThree中的类。

构建时候常见报错
高版本不支持低版本的语法
  • 错误详情
Could not find method testCompile() for arguments [{group=junit, name=junit, version=4.12}] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDepende
ncyHandler.

请添加图片描述

  • 类似于这样的报错都是因为版本问题,换个其它命令就可以了。解决方法如下:
dependencies {
    // testCompile group: 'junit', name: 'junit', version:"${junitVersion}"
    testImplementation group: 'junit', name: 'junit', version: "${junitVersion}"
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.5.5'
}
Https和http 引起的错误
  • 错误现象
Could not resolve all dependencies for configuration ':demo2-mu1:compileClasspath'.
Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven(http://127.0.0.1:8081/repository/maven-public)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details. 

  • Gradle官网错误描述
指定是否可以通过不安全的 HTTP 连接与存储库进行通信。
出于安全目的,这有意要求用户根据具体情况选择使用不安全的协议。
Gradle 故意不提供允许普遍禁用此检查的全局系统/gradle 属性。
允许通过不安全协议进行通信允许中间人冒充目标服务器,并使攻击者能够 在系统上提供恶意可执行代码。
  • 解决方法,添加相应的参数

repositories {
    maven{
        allowInsecureProtocol = true
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
}

或者是将仓库的链接换成Https

repositories {
    maven{
        url 'https://maven.aliyun.com/nexus/content/groups/public/'
    }
}

Gradle父子工程
父工程配置
// 自定义扩展 字段 这里定义版本信息
ext {
    junitVersion = '5.8.1'
    springbootVersion = '2.5.5'
    springbootTestVersion = '2.5.5'
}

//配置所有项目公共内容
allprojects {

    group 'com.li.demo'
    version '1.0-SNAPSHOT'

    // 指定需要的插件
    apply plugin: 'maven'
    // 指定语言
    apply plugin: 'java'
    // 让Gradle自动生成Intellij的项目文件
    apply plugin: 'idea'

    //配置仓库
    repositories {
        // 本地仓库
        mavenLocal()
        // 阿里云
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        mavenCentral()
    }
}

//配置子工程
subprojects {

    //指定编译版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    //配置字符编码
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }

    // 配置子模块通用依赖
    dependencies {
        // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springbootVersion
        // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test
        testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: springbootTestVersion
        testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitVersion
    }

}
子工程配置
  • 可以引入单独的配置
dependencies {
    implementation project(":gradle-project-two")
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值