一文搞通Gradle仓库配置

网友投稿 3399 2022-05-30

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 目录下,将自动生效;

一文搞通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

Gradle

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:[华为云在线课程][JavaScript的DOM编程][学习笔记]
下一篇:华为API管理六项原则如何在产品和平台落地
相关文章