Gradle的使用——快速找到自己想要在gradle中使用的jar包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle的使用——快速找到自己想要在gradle中使用的jar包相关的知识,希望对你有一定的参考价值。

参考技术A 日常我们在进行项目建设时需要使用到很多组件包,按照之前的Java开发习惯,我们通常使用maven的pom文件进行配置,通过一些maven源进行查找相关jar具体的引用方式,而在我们引用的过程中其实就有我们现在正在使用的gradle中使用的引用方式。
实际步骤如下方例子:

是不是发现之前在使用maven中一直没有仔细的观察呢,里面涵盖的gradle、gradle(short)、gradle(kotlin)三种不同的使用场景,我们这里可以直接根据自己的使用需求进行快速选择了。

Gradle 全局构建目录

【中文标题】Gradle 全局构建目录【英文标题】:Gradle global build directory 【发布时间】:2014-06-13 23:47:12 【问题描述】:

我想知道是否可以将 Gradle 配置为对所有项目使用一个全局 build 目录?我需要这个,因为我将所有项目都存储在 Google Drive 文件夹中(用于备份和从其他设备快速访问),并且当我构建项目时,Google Drive 正在加载 CPU,同时同步项目 build 目录。所以我想将build 目录移到 Google Drive 之外。

对于那些想要使用 RAM 磁盘作为 build 目录的存储来构建项目的人来说,此选项也很有用。

【问题讨论】:

没有.driveignore 文件吗 ;-) ? @PaulVerest 可能是。但现在我不将项目存储在任何云存储中,并且仅将全局构建目录用于构建过程提升和快速清理。 试试版本控制,比如 Git。 @TWiStErRob 不,我使用的是 SSD,没有进行任何测量。我的主要目标是将所有项目的构建目录移动到一个地方以轻松清理磁盘空间。现在我没有使用 RAM 驱动器,因为它不会显着提升性能,但我的主目录中仍然有全局构建目录。 @mixel 感谢您的详细回复。提示:考虑SSD aging,即使它同样快。 【参考方案1】:

感谢彼得·尼德维泽。由于更多细节,我决定发布自己的答案。

要设置全局构建目录,您需要将这些行添加到~/.gradle/init.gradle

gradle.projectsLoaded 
    rootProject.allprojects 
        buildDir = "/path/to/build/$rootProject.name/$project.name"
    

RAM 磁盘上拥有全局build 目录是不错的选择。

如果您是 macOS (OS X) 用户,您可以这样做:

diskutil erasevolume HFS+ 'RAMDiskName' `hdiutil attach -nomount ram://XXXXXX`

其中XXXXXX 是 512 字节块的计数(例如,对于 128MB RAM 磁盘,它是 262114)

buildDir 行将是:

buildDir = "/Volumes/RAMDiskName/$rootProject.name/$project.name"

您还可以扩展配置到:

    从环境变量中获取全局构建路径或回退到项目目录内的build 目录; 在路径中包含项目组,这使路径更加独特,特别是如果您有多个同名项目。

~/.gradle/init.gradle

def configProject(p, buildDir) 
    p.buildDir = "$buildDir/$p.name"  
    p.subprojects  s ->
        configProject(s, "$p.buildDir")
    


def buildDir = System.env.GRADLE_GLOBAL_BUILD_PATH
if (!buildDir?.trim()) 
    buildDir = "build"


gradle.projectsLoaded 
    if (ext.has("group")) 
        buildDir += "/$ext.group"
    
    configProject(rootProject, buildDir)

在项目settings.gradle中:

gradle.ext.group = 'com.example.yourproject'

您也可以在项目 build.gradle 中使用此设置来设置项目组,但这是可选的:

allprojects 
    ...
    group gradle.ext.group

【讨论】:

【参考方案2】:

build.gradle:

def baseDir = "/global/build/dir/$project.name"
buildDir = baseDir + "/root"
subprojects 
    buildDir = baseDir + project.path.replaceFirst(":", "/").replace(":", ".")

【讨论】:

不错。但是有没有像环境变量这样的设置?所以我可以调整全局 gradle 行为,而不是每个项目。 您的意思不是每个构建,而是所有构建?您可以将代码放入~/.gradle/init.gradle(需要稍作修改)。 感谢您的帮助!我赞成你的回答,但补充说我的问题完全可以接受。 谢谢。这在具有深度嵌套模块目录的项目中效果很好。【参考方案3】:

你也可以走相反的路。将build 文件夹替换为全局文件夹。

    删除项目的build 文件夹 mklink /d ...disk\path\to\project\build ...RAM\path\to\project(或 Unix 中的 ln) 快速构建

您可以在 clean 任务中自动执行此操作,因此 gradlew clean 会清理文件夹内容并重新创建链接。

通过一些快速测试,Google 云端硬盘似乎无法识别 Windows 连接链接中的目录。它会同步文件夹,但不会同步内容。奇怪的是,如果我将文件上传到 Drive 到这些文件夹中,它们会同步到本地副本中。但是,如果我从磁盘中删除同步文件,则删除不会同步回来。似乎链接导致云端硬盘成为一种方式。

【讨论】:

以上是关于Gradle的使用——快速找到自己想要在gradle中使用的jar包的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 全局构建目录

入坑 Android Gradle 插件开发

Gradle 学习之如何配置依赖

Gradle 学习之如何配置依赖

Gradle 学习之如何配置依赖

Gradle学习系列之一——Gradle快速入门