mklinkGradle?目錄建立軟連接
mklink 作為一個(gè) Gradle 插件,用于構(gòu)建過(guò)程中對(duì)一些目錄建立軟連接。
典型的使用場(chǎng)景:
首先,我們開(kāi)發(fā)、構(gòu)建時(shí)使用了固態(tài)硬盤(pán)和內(nèi)存虛擬磁盤(pán)。
構(gòu)件過(guò)程中,Build 文件夾往往都是清理后重新生成,Build 下文件數(shù)量多、磁盤(pán)占用空間大,mklink 可以在 Gradle 執(zhí)行構(gòu)建任務(wù)時(shí),將 Build 目錄在恰當(dāng)?shù)臅r(shí)機(jī)建立在內(nèi)存盤(pán)的軟連接,達(dá)到加速寫(xiě)入和減少固態(tài)磁盤(pán)消耗目的。
當(dāng)然,目前市面上的固態(tài)磁盤(pán),壽命足以滿足開(kāi)發(fā)人員的日常開(kāi)銷,構(gòu)建過(guò)程中的磁盤(pán)消耗顯得不那么重要,但對(duì)于持續(xù)集成服務(wù)器,經(jīng) mklink 作用后,每天省下的固態(tài)消耗就很可觀了,即使搭載普通固態(tài)硬盤(pán)的機(jī)子也能勝任持續(xù)構(gòu)建工作,內(nèi)存盤(pán)也釋放出固態(tài)磁盤(pán)的一部分占用空間,畢竟塞得太滿速度也受影響
使用方法:
- 應(yīng)用插件
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的任務(wù),mklink會(huì)在此任務(wù)執(zhí)行前建立軟連接,可借助--dry-run去查詢確定合適的任務(wù)
// next task, which depends on mklink
next = '*'
// 需要進(jìn)行軟連接的目錄
// Specifies the new symbolic link name
link = "${project.projectDir}\\build"
// 軟連接目的路徑,這里R就是一個(gè)內(nèi)存盤(pán)驅(qū)動(dòng)
// Specifies the path (relative or absolute) that the new link refers to.
target = "R:\\Build\\${project.name}"
// [可選] 當(dāng)目標(biāo)的根路徑不存在時(shí)允許繼續(xù)構(gòu)建
// [optional] Allow build continue when the root path of target not exist
allowNoRootPath = true
}
注意:
在應(yīng)用插件時(shí):
apply plugin: "com.mxstrive.gradle.mklink-plugin",在插件順序上盡量置后,mklink需要在讀取到next指示的任務(wù)之后,將自己設(shè)置為該的任務(wù)的依賴
如:插件java會(huì)生成Build目錄,現(xiàn)在需要將Build進(jìn)行軟連接到其他路徑,mklink插件需要配置在java插件之后
apply plugin: 'java'
apply plugin: 'com.mxstrive.gradle.mklink-plugin'
執(zhí)行g(shù)radle 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任務(wù)會(huì)在compileJava任務(wù)之前執(zhí)行,軟連接好Build目錄
