IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> # Gradle 在开发中的使用 -> 正文阅读

[移动开发]# 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")
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:45:19  更:2021-10-16 19:45:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:15:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码