====== Gradle Ant 호출 ======
* [[http://www.gradle.org/docs/current/userguide/ant.html|Using Ant from Gradle]]
* build.xml을 읽어서 태스크 생성, AntBuilder 이용, "ant clean compile".execute() 형태의 호출 등이 가능하다.
* [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/AntBuilder.html|AntBuilder]]의 인스턴스 ''ant''를 사용하는 것이 보통이다.
* [[http://groovy.codehaus.org/Using+Ant+from+Groovy|Using Ant from Groovy]] 참조
* [[http://groovy.codehaus.org/api/groovy/util/AntBuilder.html|AntBuilder]] 참조
* [[http://ant.apache.org/manual/anttaskslist.html|Ant Tasks List]]
* AntBuilder의 자세한 사항은 [[:gant|Gant]]의 각 항목들을 살펴보는 것이 좋다. 특히 [[gant:tasks|Gant Tasks]]와 [[gant:antlib|Gant Ant Libraries]] 참조.
===== Ant 태스크와 타입 =====
* 항상 ''ant''라는 AntBuilder 인스턴스를 사용해 앤트 태스크를 호출할 수 있다.
* ''ant.태스크이름''으로 호출한다.
* 앤트 태스크 속성은 Map 형태의 파라미터로 전달한다.
* 각종 Ant 태스크를 AntBuilder 형태로 변환한 것은 [[gant:tasks|Gant Tasks]] 를 참조한다.
* 메시지 출력
task hello << {
String greeting = 'hello from Ant'
ant.echo(message: greeting)
ant.echo('hello from Ant') // 이것도 가능.
}
* Ant 태스크의 중첩 요소들을 클로저로 표현한다.
task zip << {
ant.zip(destfile: 'archive.zip') {
fileset(dir: 'src') {
include(name: '**/*.xml')
exclude(name: '**/*.java')
}
}
}
* Ant의 타입도 태스크 처럼 메소드 이름으로 접근한다. 메소드를 호출하면 Ant의 데이터 타입을 리턴한다.
* Ant path 객체를 생성하고 보여주기
task list << {
def path = ant.path {
fileset(dir: 'src', includes: '**/*.xml')
}
path.list().each {
println it
}
}
==== 커스텀 Ant 태스크 ====
* ''ant.taskdef''
task check << {
ant.taskdef(resource: 'checkstyletask.properties') {
classpath {
fileset(dir: 'libs', includes: '*.jar')
}
}
ant.checkstyle(config: 'checkstyle.xml') {
fileset(dir: 'src')
}
}
* 커스텀 Ant 태스크에 의존성 지정하기
* 먼저 의존성 태스크 이름으로 의존성을 지정한다.
configurations {
pmd // pmd 라는 설정이 생기고
}
dependencies {
pmd group: 'pmd', name: 'pmd', version: '4.2.5' // pmd 설정에 의존성을 지정한다.
}
* ''configurations.이름.**asPath**''로 의존성 사용
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')
}
}
===== Ant 빌드 가져오기 =====
* ''ant.importBuild()''로 build.xml을 직접 읽어올 수 있다.
* **각 Ant 태스크는 Gradle 태스크로 변환된다.**
* 간단한 build.xml 로딩
* ''build.gradle''
ant.importBuild 'build.xml'
* ''build.xml''
Hello, from Ant
* 이제 ''gradle hello''로 Ant 타겟을 Gradle 태스크인 것 처럼 실행할 수 있다.
* Ant 타겟에 다른 액션 추가, 의존하기 등도 가능하면 Ant 태스크가 Gradle 태스크에 의존하는 것도 가능하다.
Hello, from Ant
===== Ant Properties =====
* 다음과 같이 Ant 프라퍼티를 설정할 수 있다.
ant.buildDir = buildDir
ant.properties.buildDir = buildDir
ant.properties['buildDir'] = buildDir
ant.property(name: 'buildDir', location: buildDir)
* Ant 프라퍼티 읽기
// build.xml에서 프라퍼티를 설정했을 때
// 다음처럼 읽는다.
println ant.antProp
println ant.properties.antProp
println ant.properties['antProp']
* Ant 레퍼런스 설정과 읽기
* 설정
// 레퍼런스 설정
ant.path(id: 'classpath', location: 'libs') // id 지정 방식
ant.references.classpath = ant.path(location: 'libs') // 명시적으로 references에 넣기
ant.references['classpath'] = ant.path(location: 'libs') // [] 연산자 이용
// build.xml에서 참조 가능
* 읽어오기
// build.xml에 설정된 값을
// 다음처럼 읽는다.
println ant.references.antPath
println ant.references['antPath']
===== java task =====
[[https://ant.apache.org/manual/Tasks/java.html|Ant Java 태스크]]는 Java 클래스를 실행한다. [[gradle:java|Gradle Java Plugin]]에서 ''JavaExec''를 사용하는 방법도 있다.
ant.java(classname: '실행할JavaClass', fork: true, classpath: configurations.임의의Config.asPath) {
arg(value: '파라미터1')
arg(value: '파라미터2')
...
}
===== zip task =====
* 일반적인 zip 압축
task zip << {
ant.zip(destfile: 'archive.zip') {
fileset(dir: 'src') {
include(name: '**/*.xml')
exclude(name: '**/*.java')
}
}
}
* 파일들을 압축파일의 특정 디렉토리에 넣기 [[https://ant.apache.org/manual/Types/zipfileset.html|ZipFileSet]]
// resources.zip 파일의 resources/ 디렉토리로 압축
ant.zip(destfile: "${buildDir}/resources.zip") {
zipfileset(dir: "${webAppDirName}/WEB-INF/resources", prefix: "resources")
}