一文搞通Gradle仓库配置

举报
maijun 发表于 2021/04/15 11:12:14 2021/04/15
【摘要】 本文介绍Gradle中项目依赖和插件依赖的仓库的配置方法,从项目级别配置到全局仓库配置等,都进行了介绍。另外介绍了Gradle初始化脚本的使用方式。

Gradle 作为一款构建工具,在依赖仓库的使用上,和Maven有相通的地方,也有不同的地方,这里,我们介绍在Gradle中,仓库配置的一些内容。

1. Gradle构建时需要从仓库获取什么?

我们一定要首先回答清楚这个问题,才能保证我们正确地配置了Gradle的仓库。Gradle在执行构建时,和Maven类似,需要获取下面两种依赖:

1.1 项目依赖

在项目开发中,项目依赖的第三方库信息,这部分依赖在工程的build.gradle中进行配置,如下面的配置信息:

dependencies {
    implementation 'com.google.guava:guava:21.0'
    testImplementation 'junit:junit:4.12'
}

这里表示当前项目有两个依赖,其中 guava 是项目依赖,在编译、打包、运行等阶段都会使用,junit 是单元测试依赖,只有在测试阶段使用。

这些依赖,会在项目构建时,下载下来使用(如果使用IDEA等IDE开发,则在编码阶段,IDE会辅助下载相关依赖,保证编码顺畅)。

1.2 插件依赖

我们都知道,Gradle和Maven都是插件化开发,在声明周期不同的阶段,都是通过不同的插件来完成的。项目构建需要哪些依赖,都会在项目的build.gradle中进行配置,如下的配置示例:

plugins {
    id "jacoco"
    id "java"
    id "application"
    id "org.sonarqube" version "3.1.1"
}

上面的示例中,依赖了四个插件,分别是 jacoco,java,application,org.sonarqube。

上面依赖的四个插件,都是二进制插件(还有一种插件为脚本插件,不是我们当前插件依赖介绍的范围)。二进制插件应用是通过设置他们的ID来生效的,插件ID是插件的全局唯一标识符,可以通过插件ID查找到插件坐标。

Gradle在构建时,如果需要应用到特定的插件,并且本地仓库没有,则需要从远端下载使用。

2. Gradle仓库配置

在第1节,介绍了Gradle需要下载的依赖有哪些,那么,针对下载的不同的内容,就需要进行不同的设置。我们将分别针对项目依赖和插件依赖,如何在项目中和全局配置。

2.1 项目依赖仓库配置

对于项目依赖仓库配置,如果只是希望对当前gradle工程生效,可以直接在项目根路径的 build.gradle 中进行配置,配置方法如下:

repositories {
    maven { url "https://maven.aliyun.com/repository/public" }
    maven { url "https://repo.huaweicloud.com/repository/maven" }
    mavenLocal()
    mavenCentral()
}

如果是想要针对全局生效,可以放到 ~/.gradle/init.gradle 文件中进行配置,如下:

allprojects {
    repositories {
        maven { url "https://maven.aliyun.com/repository/public" }
        maven { url "https://repo.huaweicloud.com/repository/maven" }
        mavenLocal()
        mavenCentral()
    }
}

阿里云的maven仓,已经同步了很多maven源,参考:https://maven.aliyun.com/mvn/guide,可以基于需要进行配置,如果公司内部,有自己的私服,也可以直接在上面使用 maven { url ""} 进行配置。

2.2 插件依赖仓库配置

在Gradle中,设置项目依赖仓库,是不会直接对插件依赖仓库生效的,需要对插件依赖仓库进行单独配置。

如果希望配置只对当前项目生效,可以在项目根路径下面的 settings.gradle 中直接进行配置,配置方法如下(注意,这个内容一定要放在settings.gradle最前面):

pluginManagement {
    repositories {
        maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
        mavenLocal()
        mavenCentral()
        gradlePluginPortal()
    }
}

如果希望配置全局有效,可以在 ~/.gradle/init.gradle 文件中进行配置,如下:

settingsEvaluated { settings ->
    settings.pluginManagement {
        repositories {
            maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
            mavenLocal()
            mavenCentral()
            gradlePluginPortal()
        }
    }
}

阿里云和华为云都有提供Maven镜像仓库(如前面的配置,Gradle 一般都是配置 Maven镜像仓库),但是当前我查看了阿里云和华为云镜像仓库的源,阿里云有同步Gradle插件仓库源(https://plugins.gradle.org/m2/),华为云还没有,所以设置Gradle插件的仓库,还需要配置阿里云Maven仓库。

3. 初始化脚本(init脚本)配置

在上面小节,在全局仓库配置时,都是配置到 init.gradle 文件中,这里简单对 init 脚本进行一些介绍(当然,个人推荐不要做一些花里胡哨的操作,一直简单就是美,但是如果有特殊需求,可以考虑下面的配置)。

3.1 什么是初始化脚本

初始化脚本和项目中的build.gradle类似,只不过这些初始化脚本,会优先于build.gradle执行,因此可以在这些初始化脚本里面做一些前期动作,例如:定义一些全局的插件、仓库信息、环境变量信息(例如JDK安装路径)、构建监听器等。初始化脚本,扩展名为 .gradle。

3.2 初始化脚本使用

初始化脚本有不同的生效方法,下面是几种可以使初始化脚本生效的方法:

(1) 在命令行中,使用 -I 或者 --init-script 指定,此时初始化脚本命名只需要 .gradle 结尾,并且放到任意位置,可以指定一个或者多个 初始化脚本,但是一定要保证指定的初始化脚本存在,否则就直接报错;

(2) 初始化脚本命名为 init.gradle,放到 USER_HOME/.gradle 目录下,将自动生效;

(3) 初始化脚本以 .gradle 扩展名命名,放到 USER_HOME/.gradle/init.d 目录下,也是自动生效;

(4) 初始化脚本以 .gradle 扩展名命名,放到 GRADLE_HOME/init.d 目录下,将自动生效。

如果上面四类初始化脚本都存在,则按照上面的顺序生效,如果在同一个层级有多个初始化脚本,则以初始化脚本名字排序生效。

关于初始化脚本的更详细信息,可以查看下面的参考文档。

4. 参考

华为开源镜像站:https://mirrors.huaweicloud.com/

阿里云云效Maven:https://maven.aliyun.com/mvn/guide

Gradle插件帮助文档:https://docs.gradle.org/current/userguide/plugins.html

Gradle init script帮助文档:https://docs.gradle.org/current/userguide/init_scripts.html



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200