mklink 作为一个 Gradle 插件,用于构建过程中对一些目录建立软连接。
典型的使用场景:
首先,我们开发、构建时使用了固态硬盘和内存虚拟磁盘。
构件过程中,Build 文件夹往往都是清理后重新生成,Build 下文件数量多、磁盘占用空间大,mklink 可以在 Gradle 执行构建任务时,将 Build 目录在恰当的时机建立在内存盘的软连接,达到 加速写入 和 减少固态磁盘消耗 目的。
当然,目前市面上的固态磁盘,寿命足以满足开发人员的日常开销,构建过程中的磁盘消耗显得不那么重要,但对于持续集成服务器,经 mklink 作用后,每天省下的固态消耗就很可观了,即使搭载普通固态硬盘的机子也能胜任持续构建工作,内存盘也释放出固态磁盘的一部分占用空间,毕竟塞得太满速度也受影响
使用方法:
Using the plugins DSL:
plugins { id "com.mxstrive.gradle.mklink-plugin" version "1.0.4" }
Using legacy plugin application:
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.mxstrive.gradle:mklink:1.0.4" } } apply plugin: "com.mxstrive.gradle.mklink-plugin"
配置
mklink { // 依赖mklink的任务,mklink会在此任务执行前建立软连接,可借助–dry-run去查询确定合适的任务 // next task, which depends on mklink next = ‘*’ // 需要进行软连接的目录 // Specifies the new symbolic link name link = “${project.projectDir}\build” // 软连接目的路径,这里R就是一个内存盘驱动 // Specifies the path (relative or absolute) that the new link refers to. target = “R:\Build\${project.name}” // [可选] 当目标的根路径不存在时允许继续构建 // [optional] Allow build continue when the root path of target not exist allowNoRootPath = true }
注意:
在应用插件时:
apply plugin: “com.mxstrive.gradle.mklink- plugin”,在插件顺序上尽量置后,mklink需要在读取到next指示的任务之后,将自己设置为该的任务的依赖
如:插件java会生成Build目录,现在需要将Build进行软连接到其他路径,mklink插件需要配置在java插件之后
apply plugin: 'java' apply plugin: 'com.mxstrive.gradle.mklink-plugin'
执行gradle build –dry-run,可以看到
:mklink SKIPPED :compileJava SKIPPED :processResources SKIPPED :classes SKIPPED :jar SKIPPED :assemble SKIPPED :compileTestJava SKIPPED :processTestResources SKIPPED :testClasses SKIPPED :test SKIPPED :check SKIPPED :build SKIPPED
mklink任务会在compileJava任务之前执行,软连接好Build目录