당신의 build script 안에서, Gradle에 의해 제공되는 ant라고 불리는 property가 있다.
이 것은 AntBuilder instance의 참조이다.
Antbuilder 는 당신의 build script에서 Ant task, type, properties에 접근하는 데에 사용된다.
Ant의 build.xml 포맷에서 Groovy로 맴핑시키는 간단한 방법이 있고, 아래에 소개되어 있다.
당신은 AntBuilder instance의 method를 호출함으로써 Ant task를 실행시킬 수 있다.
당신은 method 이름을 task이름으로 사용할 수 있다.
예를 들면, 당신은 ant.echo() method를 사용함으로써 Ant echo task를 실행시킬 수 있다.
Ant task의 속성은 Map 파라미터 형태로 method로 전달된다.
아래는 echo task의 예제이다.
우리는 Groovy code와 Ant task markup을 섞어쓸 수 있다.
이 것은 극도로 강력하다.
ex) Using an Ant task
build.gradle
task hello << { String greeting = 'hello from Ant' ant.echo(message: greeting) }
gradle hello 의 실행 결과
> gradle hello :hello [ant:echo] hello from Ant BUILD SUCCESSFUL Total time: 1 secs
당신은 task method 호출의 파라미터로 넘기는 것을 이용하여서, Ant task에 내포된 text로 넘길 수 있다.
이 예제에서, 우리는 message를 echo task에 내포된 text로써 넘길 것이다.
ex) Passing nested text to an Ant task
build.gradle
task hello << { ant.echo('hello from Ant') }
gradle hello의 실행 결과
> gradle hello :hello [ant:echo] hello from Ant BUILD SUCCESSFUL Total time: 1 secs
당신은 closure 안 속으로 내포된 element 역시 Ant task로 넘겨줄 수 있다.
내포된 element는 method의 이름과 똑같이 호출하는 task와 같은 방식으로 정의된다.
ex) Passing nested elements to an Ant task
build.gradle
task zip << { ant.zip(destfile: 'archive.zip') { fileset(dir: 'src') { include(name: '**.xml') exclude(name: '**.java') } } }
당신은 method 이름을 type의 이름으로써 사용함으로써, task에 접근하는 것과 같은 방식으로 Ant type에 접근할 수 있다.
method는 Ant data type을 return해주고, 그러고나서 당신은 이것을 build script에 직접 사용할 수 있다.
아래 예제에서, 우리는 Ant path object를 만들고, 각 content를 하나씩 보여주게 된다.
ex) Using an Ant type
build.gradle
task list << { def path = ant.path { fileset(dir: 'libs', includes: '*.jar') } path.list().each { println it } }
Using custom Ant tasks in your build
당신의 build에서 이용 가능한 custom task를 만들기 위해서, 당신은 taskdef 혹은 typedef Ant task를 사용할 수 있다.
그리고 나서 당신은 built-in Ant task에서 했던 것처럼 custom된 Ant task를 참조할 수 있다.
ex) Using a custom Ant task
build.gradle
task check << { ant.taskdef(resource: 'checkstyletask.properties') { classpath { fileset(dir: 'libs', includes: '*.jar') } } ant.checkstyle(config: 'checkstyle.xml') { fileset(dir: 'src') } }
당신은 custom task를 위해 사용할 classpath를 모으는 데에, Gradle의 dependency management를 사용할 수 있다.
이 것을 하기위해서, 당신은 classpath를 위한 custom configuration을 정의하여야 하고, 그리고 나서 configuration에 몇몇 dependency를 추가하여야 한다.
ex) Declaring the classpath for a custom Ant task
build.gradle
configurations { pmd } dependencies { pmd group: 'pmd', name: 'pmd', version: '4.2.5' }
classpath configuration을 사용하기 위해서, custon configuration의 asPath property를 사용하면 된다.
ex) Using a custom Ant task and dependency management together
build.gradle
task check << { ant.taskdef(name: 'pmd', classname: 'net.sourceforge.pmd.ant.PMDTask', classpath: configurations.pmd.asPath) ant.pmd(shortFilenames: 'true', failonruleviolation: 'true', rulesetfiles: file('pmd-rules.xml').toURI().toString()) { formatter(type: 'text', toConsole: 'true') fileset(dir: 'src') } }
Importing an Ant build
당신은 Ant build를 Gradle project로 import하기 위해 ant.importBuild() method를 사용할 수 있다.
당신이 Ant build를 import할 때, 각각의 Ant target은 Gradle task로써 다루어진다.
이 것은 당신이 Ant target을 Gradle task와 같이 조정하고 실행할 수 있다는 것을 의미한다.
ex) Importing an Ant build
build.gradle
ant.importBuild 'build.xml'
build.xml
Hello, from Ant
gradle hello 의 결과
> gradle hello :hello [ant:echo] Hello, from Ant BUILD SUCCESSFUL Total time: 1 secs
당신은 Ant target에 의존적인 task 역시 실행할 수 있다.
ex) Task that depends on Ant target
build.gradle
ant.importBuild 'build.xml' task intro(dependsOn: hello) << { println 'Hello, from Gradle' }
gradle intro 의 실행 결과
> gradle intro :hello [ant:echo] Hello, from Ant :intro Hello, from Gradle BUILD SUCCESSFUL Total time: 1 secs
또는, Ant target에 어떠한 행위를 추가할 수도 있다.
ex) Adding behaviour to an Ant target
build.gradle
ant.importBuild 'build.xml' hello << { println 'Hello, from Gradle' }
gradle hello 의 실행 결과
> gradle hello :hello [ant:echo] Hello, from Ant Hello, from Gradle BUILD SUCCESSFUL Total time: 1 secs
Ant target이 Gradle task에 의존적이게 설정하는 것도 가능하다.
ex) Ant target that depends on Gradle task
build.gradle
ant.importBuild 'build.xml' task intro << { println 'Hello, from Gradle' }
build.xml
Hello, from Ant
gradle hello 의 실행 결과
> gradle hello :intro Hello, from Gradle :hello [ant:echo] Hello, from Ant BUILD SUCCESSFUL Total time: 1 secs
가끔 현재 존재하는 Gradle task와의 충돌을 피하기 위해 Ant target으로부터 생성된 task를 다시 이름붙이는 것이 필요한 경우가 있다.
이 것을 하기위해, AntBuilder.importBuild() method를 사용할 수 있다.
Renaming imported Ant targets
build.gradle
ant.importBuild('build.xml') { antTargetName -> 'a-' + antTargetName }
build.xml
Hello, from Ant
gradle a-hello 의 실행 결과
> gradle a-hello :a-hello [ant:echo] Hello, from Ant BUILD SUCCESSFUL Total time: 1 secs
Ant properties and references
Ant task에 사용될 수 있는 Ant property를 설정할 수 있는 방법은 다양하다.
당신은 AntBuilder instance에서 property를 직접적으로 설정할 수 있다.
Ant Property는 당신이 변환할 수 있는 Map 형태로도 사용 가능하다.
당신은 또한 Ant property task 도 사용할 수 있다. 아래 예제들을 보자.
ex) Setting an Ant property
build.gradle
ant.buildDir = buildDir ant.properties.buildDir = buildDir ant.properties['buildDir'] = buildDir ant.property(name: 'buildDir', location: buildDir)
build.xml
buildDir = ${buildDir}
많은 Ant tasks는 그것들이 실행될 때 property를 설정한다.
그것들의 property를 가져올 수 있는 다양한 방법이 존재한다.
당신은 AntBuilder instance로부터 직접적으로 property를 가져올 수 있다.
이 Ant properties 역시 Map 형태로 이용가능하다.
아래 예제를 보자.
ex) Getting an Ant property
build.xml
build.gradle
println ant.antProp println ant.properties.antProp println ant.properties['antProp']
Ant reference를 설정하기 위한 몇가지 방법도 있다.
ex) Setting an Ant reference
build.gradle
ant.path(id: 'classpath', location: 'libs') ant.references.classpath = ant.path(location: 'libs') ant.references['classpath'] = ant.path(location: 'libs')
build.xml
Ant reference를 가져오는 몇 가지 방법 역시 존재한다.
ex) Getting an Ant reference
build.xml
build.gradle
println ant.references.antPath println ant.references['antPath']
API
Ant integration은 AntBuilder에 의해 제공된다.
원본 출처 : https://docs.gradle.org/current/userguide/ant.html
댓글 없음 :
댓글 쓰기