Gradle 이해: incremental task
문서 목록
1.1 incremental task와 incremental task action
incremental task (증량task): 입력이 바뀌었을 때 변경된 부분만 처리할 수 있습니다.하나의incrementaltask는 하나
incremental task action
를 실현해야 합니다.incremental task action (증가task action): @TaskAction에 의해 주석된 방법으로
IncrementalTaskInputs
인자를 수신합니다.IncrementalTaskInputsoutOfDate
방법에서 변경된 input을 처리하고 removed
방법에서 제거된 input을 처리할 수 있습니다.1.2 판단 기준
그래드가 어떤 input이 바뀌었는지 판단할 수 있는지
IncrementalTaskInputs.incremental
를 통해 판단할 수 있다.Gradle은 어떤 input이 변경되었는지 판단할 수 있습니다.
이 때 변경된 input만 outOfDate action을 실행합니다.
Gradle은 어떤 input이 바뀌었는지 판단할 수 없습니다.
2. 실행 실례
2.1 Incremental ReverseTask 클래스
class IncrementalReverseTask extends DefaultTask {
@InputDirectory
// @InputDirectory property task
// path content ,task out-of-date
File inputDir
@OutputDirectory
// @OutputDirectory property task
// path content ,task out-of-date
File outputDir
@Input
// @Input property task , ,task out-of-date
// File Input ,File path out-of-date;File content out-of-date
def inputProperty
@TaskAction
// @TaskAction task
void execute(IncrementalTaskInputs inputs) {
// inputs.incremental: Gradle input
// output file ,Gradle input ,inputs.incremental false
// input out-of-date
println inputs.iscremental ? 'CHANGED inputs considered out of date'
: 'ALL inputs considered out of date'
if (!inputs.incremental)
project.delete(outputDir.listFiles())
// input action
inputs.outOfDate { change ->
if (change.file.directory) return
println "out of date: ${change.file.name}"
def targetFile = new File(outputDir, change.file.name)
targetFile.text = change.file.text.reverse()
}
// input action
inputs.removed { change ->
if (change.file.directory) return
println "removed: ${change.file.name}"
def targetFile = new File(outputDir, change.file.name)
targetFile.delete()
}
}
}
2.2 Incremental ReverseTask 유형task
task incrementalReverse(type: IncrementalReverseTask) {
inputDir = file('inputs')
outputDir = file("$buildDir/outputs")
inputProperty = project.properties['taskInputProperty'] ?: 'original'
}
2.3 첫 실행
// inputs
task originalInputs() {
doLast {
file('inputs').mkdir()
file('inputs/1.txt').text = 'Content for file 1.'
file('inputs/2.txt').text = 'Content for file 2.'
file('inputs/3.txt').text = 'Content for file 3.'
}
}
실행
$ ./gradlew -q originalInputs incrementalReverse
ALL inputs considered out of date
out of date: 3.txt
out of date: 2.txt
out of date: 1.txt
2.4 변경 없이 두 번째 실행
$ ./gradlew -q incrementalReverse
출력 없음
2.5 input 업데이트 후 실행
task updateInputs() {
doLast {
file('inputs/1.txt').text = 'Changed content for existing file 1.'
file('inputs/4.txt').text = 'Content for new file 4.'
}
}
실행
$ ./gradlew -q updateInputs incrementalReverse
CHANGED inputs considered out of date
out of date: 1.txt
out of date: 4.txt
2.6 input 제거 후 실행
task removeInput() {
doLast {
file('inputs/3.txt').delete()
}
}
실행
$ ./gradlew -q removeInput incrementalReverse
CHANGED inputs considered out of date
removed: 3.txt
2.7 output 제거 후 실행
task removeOutput() {
doLast {
file("$buildDir/outputs/1.txt").delete()
}
}
실행
$ ./gradlew -q removeOutput incrementalReverse
ALL inputs considered out of date
out of date: 4.txt
out of date: 2.txt
out of date: 1.txt
2.8 input 속성 변경 후 실행
$ ./gradlew -q -PtaskInputProperty=changed incrementalReverse
ALL inputs considered out of date
out of date: 4.txt
out of date: 2.txt
out of date: 1.txt
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.