====== Gant Targets ======
===== Target의 선언 =====
* 타겟([[gradle:task|Gradle에서는 태스크의 역할]])은 세가지 형태로 정의 할 수 있다.
target ( name : target-name ) target-closure
target ( name : target-name , description : target-description ) target-closure
target ( target-name : target-description ) target-closure
* target-description은 ''gant -p/-T'' 옵션에서 타겟의 설명으로 나오게 된다.
* target-description이 없으면 도움말 타겟 리스트에서 제외된다.
===== target-closure =====
* target-closure에서는 ''ant''라는 이름의 AntBuilder 객체의 메소드 이름으로 Ant Task를 호출할 수 있다.
* 그러나 ant 객체 없이 바로 호출도 가능하다.
target ( flob : 'Some message or other.' ) {
// 둘 다 가능
ant.echo ( message : 'Some message.' )
echo ( message : 'Some message.' )
}
===== 다른 타겟 호출 =====
* 타겟 이름으로 다른 타겟을 호출 할 수 있다.
target ( adob : 'A target called adob.' ) {
flob ( ) //flob 이라는 타겟 호출
this['flob']() // 문자열로 flob 타겟 호출
}
* 다른 타겟에 의존할 수도 있다.
target ( adob : 'A target called adob.' ) {
depends ( flob ) // adob 타겟을 실행하면 그 전에 항상 flob 타겟 호출
depends ( 'floc' ) // 문자열로 'floc'' 타겟에 의존하게
}
* 의존성은 여러개 설정할 수 있으며 설정 순서에 따라 실행한다. 위 예에서는 'flob', 'floc' 순서로 실행한다.
===== 기본 타겟 =====
* ''gant'' 명령만 실행해도 되는 기본 타겟을 설정할 수 있다.
setDefaultTarget ( aTarget )
* 저 명령은 실제로는 다음으로 실행된다
target ( 'default' : 'aTarget' ) { aTarget ( ) }
===== target-closure의 파라미터 =====
* target-closure에는 항상 타겟에 대한 정보가 Map으로 전달된다.
target ( example : '' ) { println ( it.name ) ; println ( it.description ) }
===== 동적 타겟 생성 =====
''build.gant''는 그 자체가 스크립트이고 ''target''도 메소드이므로 동적으로 타겟을 생성하는 것이 가능하다. 단, **GString으로 ''target''의 인자를 넘기는 것은 하지 말 것.** GString의 늦은 초기화 특징 때문에 엉뚱한 값이 들어갈 수도 있다.
* ''build.gant''
def names = ['a','b','c','d']
names.each { name ->
target(name: name + '_project', description: 'Description for ' + name) {
echo(message: "project name : ${name}")
}
}
target(allProject: 'run all projects') {
names.each {
depends(it) // 모든 name_project에 대해 의존성 걸기
}
}
* ''gant -T''
$ gant -T
a_project Description for a
allProject run all projects
b_project Description for b
c_project Description for c
d_project Description for d