사용자 도구

사이트 도구


gradle:ant

Gradle Ant 호출

Ant 태스크와 타입

  • 항상 ant라는 AntBuilder 인스턴스를 사용해 앤트 태스크를 호출할 수 있다.
  • ant.태스크이름으로 호출한다.
  • 앤트 태스크 속성은 Map 형태의 파라미터로 전달한다.
  • 각종 Ant 태스크를 AntBuilder 형태로 변환한 것은 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
      <project>
          <target name="hello">
              <echo>Hello, from Ant</echo>
          </target>
      </project>
    • 이제 gradle hello로 Ant 타겟을 Gradle 태스크인 것 처럼 실행할 수 있다.
    • Ant 타겟에 다른 액션 추가, 의존하기 등도 가능하면 Ant 태스크가 Gradle 태스크에 의존하는 것도 가능하다.
      <project>
          <target name="hello" depends="intro"> <!-- intro는 Gradle 태스크 -->
              <echo>Hello, from Ant</echo>
          </target>
      </project>

Ant Properties

  • 다음과 같이 Ant 프라퍼티를 설정할 수 있다.
    ant.buildDir = buildDir
    ant.properties.buildDir = buildDir
    ant.properties['buildDir'] = buildDir
    ant.property(name: 'buildDir', location: buildDir)
  • Ant 프라퍼티 읽기
    // build.xml에서 프라퍼티를 설정했을 때
    <property name="antProp" value="a property defined in an Ant build"/>
    
    // 다음처럼 읽는다.
    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에서 참조 가능
      <path refid="classpath"/>
    • 읽어오기
      // build.xml에 설정된 값을
      <path id="antPath" location="libs"/>
      
      // 다음처럼 읽는다.
      println ant.references.antPath
      println ant.references['antPath']

java task

Ant Java 태스크는 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')
            }
        }
    }
  • 파일들을 압축파일의 특정 디렉토리에 넣기 ZipFileSet
    // resources.zip 파일의 resources/ 디렉토리로 압축
     
    ant.zip(destfile: "${buildDir}/resources.zip") {
        zipfileset(dir: "${webAppDirName}/WEB-INF/resources", prefix: "resources")
    }
gradle/ant.txt · 마지막으로 수정됨: 2014/06/27 15:05 저자 kwon37xi