gradle task type - 01
Task
gradle을 통해 단일의 작업을 의미한다. clean, compileJava, build 등 기본적으로 정의된 작업 뿐만 아니라 사용자가 원하는 작업을 정의할 수 있다.
기본 구조
task myTask
task myTask {
//...
}
task myTask(type: someType)
task myTask(type: SomeType) {
//...
}
Type
공통
dependsOn
: task의 종속성을 설정할 수 있다. dependsOn ${TASK}
가 먼저 실행 된다. 여러개의 dependsOn이 한 task에 존재한다면 그 순서는 보장되지 않는다. 순서에 보장된 task를 실행하기 위해서는 mustAfterRun
을 통해서 정의한다.
task a {
doFirst {
println "A"
}
}
// dependsOn #1
task b {
dependsOn a
doFirst {
println "B"
}
}
// dependsOn #2
task c (dependsOn: 'b') {
doFirst {
println "C"
}
}
task d {
doFirst {
println "D"
}
}
// dependsOn #3
task e (dependsOn: ['c', 'd']) {
doFirst {
println "E"
}
}
/*
Executing task 'e'...
> Task :a UP-TO-DATE
> Task :b UP-TO-DATE
> Task :c UP-TO-DATE
> Task :d UP-TO-DATE
> Task :e UP-TO-DATE
*/
doFirst
: 해당 action을 Task 목록 시작 시 수행한다.
doLast
: 해당 action을 Task 목록 끝에 수행한다.
finalizedBy
: Task 목록의 종료 전 수행한다.
task greet {
println "TASK [greet]"
doFirst {
println "greet #1"
}
doLast {
println "greet #2"
}
finalizedBy {
println "greet END"
}
}
task close {
dependsOn greet
println "TASK [close]"
doFirst {
println "close #1"
}
doLast {
println "close #2"
}
finalizedBy {
println "close END"
}
}
/*
Executing task 'close'...
> Configure project :
TASK [greet]
TASK [close]
close END
greet END
> Task :greet
greet #1
greet #2
> Task :close
close #1
close #2
*/
property
: 해당 Task에 속성 값을 반환한다.
setProperty
: 해당 Task에 속성을 설정한다
hasProperty
: 해당 Task에 속성이 있는지 확인한다.
task initTimeout {
println "before: ${property("timeout")}"
setProperty("timeout", Duration.ofSeconds(10L))
println "after: ${property("timeout")}"
}
/*
Executing task 'initTimeout'...
> Configure project :
before: property(java.time.Duration, undefined)
after: property(java.time.Duration, fixed(class java.time.Duration, PT10S))
*/
onlyIf
: True일 경우에만 실행한다. 하나라도 false인 경우 skip한다.
task sayHelloWhenOsSystemIsWindows (type: Exec) {
onlyIf {
org.gradle.internal.os.OperatingSystem.current().isWindows()
}
doFirst {
commandLine 'cmd', '/c', 'echo', 'Hello'
}
}
mustRunAfter
: 여러개의 태스크를 수행할 때 특정 Task 이후 실행해야 할 Task를 설정한다.
task a {}
task b {}
task c {
dependsOn a, b
a.mustRunAfter b
}
/*
Executing task 'cc'...
> Task :bb UP-TO-DATE
> Task :aa UP-TO-DATE
> Task :cc UP-TO-DATE
*/
Execute
명령을 실행 할 수 있는 Task 타입이다
commandLine
: command 명령을 수행할 수 있다.
task buildAppImage(type: Exec) {
commandLine 'appimage-builder', '--recipe', 'build/appimage-builder.yml'
}
Copy
파일이나 디렉토리를 복사 할 수 있는 Task 타입이다
from
: 복사하려는 대상 (source)을 설정한다. include, exclude, rename등을 활용하여 복사를 할 수 있다.
into
: 복사본의 디렉토리
task copyAppImageBuilder(type: Copy) {
dependsOn bootJar
from file("src/main/resources/appimage-builder.yml")
into "build"
}
task copyAssets(type: Copy) {
from('src/main/resources/assets') {
include '**/*.png'
include '**/*.so'
exclude '**/*.xml'
rename '([0-9]+)\\([a-zA-Z]+)', '$1_$2'
}
into "build/assets"
}
Jar
Jar파일로 산출물을 만든다
manifest
: Jar파일로 만들기 위한 설정을 할 수 있다.
entryCompression
: Jar 파일의 압축 수준을 정할 수 있으며 기본값은 ZipEntryCompression.DEFLATED
이며, ZipEntryCompression.STORED
인 경우 압축하지 않는다.
jar {
manifest {
attributes 'Main-Class': 'lab.yearnlune.task.MainEntry'}
entryCompression ZipEntryCompression.DEFLATED
from { (configurations.runtimeClasspath).collect { it.isDirectory() ? it : zipTree(it) } } {
exclude 'META-INF/.RSA', 'META-INF/.SF', 'META-INF/*.DSA', 'META-INF/*.SF'
exclude 'org/slf4j/**'
}
archiveFileName.set("task.jar")
}
Leave a comment