====== 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