사용자 도구

사이트 도구


gradle:groovy

Gradle Groovy Plugin

Groovy 플러그인은 Gradle Java Plugin를 상속하고 Groovy 프로젝트 지원을 추가한 것이다. Groovy 단독 혹은 Groovy/Java 혼합 프로젝트를 지원한다. Java 단독도 가능하다. Java와 Groovy간의 접합(Joint) 컴파일을 지원한다.

  • build.gradle
    apply plugin: 'groovy'

태스크

태스크 이름 의존성 타입 설명
compileGroovy compileJava GroovyCompile groovyc로 그루비 소스 컴파일
compileTestGroovy compileTestJava GroovyCompile groovyc로 그루티 테스트 소스 컴파일
compile소스셋Groovy compile소스셋Java GroovyCompile 주어진 소스셋 컴파일
groovydoc - GroovyDoc groovydoc으로 Groovy API 문서 생성

Groovy 플러그인은 기존 Java 플러그인의 태스크에 다른 의존성을 추가한다.

태스크 이름 의존성
classes compileGroovy
testClasses compileTestGroovy
소스셋Classes compile소스셋Groovy

프로젝트 레이아웃

Groovy 소스 디렉토리에는 groovy와 java 소스코드가 올 수 있다. Java 소스 디렉토리에는 java 소스 코드만 올 수 있다. 아래 목록의 디렉토리가 꼭 있을 필요는 없다.

Java 플러그인의 디렉토리는 생략한다.

디렉토리 의미
src/main/groovy 운영 Groovy 소스. 접합 컴파일용 Java 소스도 올 수 있다.
src/test/groovy 테스트 Groovy 소스. 접합 컴파일용 Java 소스도 올 수 있다.
src/소스셋/groovy 소스셋의 Groovy 소스. 접합 컴파일용 Java 소스도 올 수 있다.

프로젝트 레이아웃 변경

sourceSets {
    main {
        groovy {
            srcDir 'src/groovy' // 운영 Groovy 소스 디렉토리를 추가한다.(기존값에 더하는 것임)
        }
    }
}

srcDirSourceDirectorySet.srcDir() 메소드이다.

의존성 관리

groovy 라는 의존성 구성이 추가된다.

  • Gradle과는 무관하게 원하는 Groovy 버전을 선택할 수 있다.
  • Gradle이 컴파일/문서 생성시 사용하는 groovycgroovydoc은 지정된 버전의 것을 사용하게 된다.
  • Groovy 버전 지정 build.gradle
    repositories {
        mavenCentral()
    }
     
    dependencies {
        groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.7.10' // groovy 구성에 추가한다.
    }
  • lib 디렉토리에 groovy JAR들을 둔 상태일 경우 의존성 구성 build.gradle
    repositories {
        flatDir { dirs 'lib' }
    }
     
    dependencies {
        groovy module(':groovy:1.6.0') {
            dependency('asm:asm-all:2.2.3')
            dependency('antlr:antlr:2.7.7')
            dependency('commons-cli:commons-cli:1.2')
            module(':ant:1.7.0') {
                dependencies(':ant-junit:1.7.0:jar', ':ant-launcher:1.7.0')
            }
        }
    }

소스셋 프라퍼티

Groovy 플러그인은 소스셋에 다음 프라퍼티들을 추가한다.

GroovySourceSet 타입이 선언한 프라퍼티들이다.

프라퍼티 이름 타입 기본값 설명
groovy SourceDirectorySet (read-only) not null 이 소스셋의 Groovy 소스 파일. 모든 *.groovy와 *.java를 포함하며 다른 것들은 제외시킨다.
groovy.srcDirs Set<File> Gradle 파일 다루기 참조 [projectDir/src/name/groovy] 이 소스셋의 Groovy 소스를 포함하는 디렉토리 목록. Java 소스도 있을 수 있다.]]
allGroovy FileTree (read-only) not null 이 소스셋의 모든 Groovy 파일. 오직 .groovy 파일만 포함한다.

Groovy 플러그인은 몇몇 소스셋 프라퍼티들을 수정한다.

프라퍼티 이름 변경사항
allJava Groovy 소스 디렉토리의 모든 *.java 파일을 이 프라퍼티에 추가시킨다.
allSource Groovy 소스 디렉토리의 모든 소스 파일을 이 프라퍼티에 추가시킨다.

CompileGroovy

Groovy 플러그인은 프로젝트의 각 소스셋에 GroovyCompile 인스턴스를 추가한다. 이는 Compile 태스크를 상속한다. 이 태스크는 Ant Groovyc 태스크에 컴파일을 위임한다.

CompileGroovy의 프라퍼티들은 다음과 같다.

태스크 프라퍼티 타입 기본값
classpath FileCollection 소스셋.compileClasspath
source FileTree
destinationDir File 소스셋.output.classesDir
groovyClasspath FileCollection groovy configuration

컴파일 옵션들

  • Groovy 소스 인코딩 지정
    // /src/main/groovy 안의 *.java 인코딩
    [compileGroovy, compileTestGroovy]*.options*.encoding = 'UTF-8' 
    // /src/main/groovy 안의 *.groovy 인코딩
    [compileGroovy, compileTestGroovy]*.groovyOptions*.encoding = 'UTF-8' 
     
    // 길게 풀어쓰면
    compileGroovy {  
        groovyOptions.encoding = defaultEncoding  // affects *.groovy under src/main/groovy  
        options.encoding = defaultEncoding        // affects *.java under src/main/groovy  
    }  
  • Enabling Groovy’s “invokedynamic” support in Gradle
    tasks.withType(GroovyCompile) {
      groovyOptions.optimizationOptions.indy = true
    }
  • you should use JDK 7u60 or above to avoid any potential invokedynamic related bugs.
gradle/groovy.txt · 마지막으로 수정됨: 2014/09/11 03:17 저자 kwon37xi