====== Gradle Groovy Plugin ======
* [[http://www.gradle.org/docs/current/userguide/groovy_plugin.html|Groovy Plugin]]
Groovy 플러그인은 [[gradle:java|Gradle Java Plugin]]를 상속하고 Groovy 프로젝트 지원을 추가한 것이다. Groovy 단독 혹은 Groovy/Java 혼합 프로젝트를 지원한다. Java 단독도 가능하다. Java와 Groovy간의 접합(Joint) 컴파일을 지원한다.
* ''build.gradle''
apply plugin: 'groovy'
====== 태스크 ======
^태스크 이름 ^의존성 ^타입 ^설명 ^
| compileGroovy | compileJava | [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.GroovyCompile.html|GroovyCompile]] | groovyc로 그루비 소스 컴파일 |
| compileTestGroovy | compileTestJava | [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.GroovyCompile.html|GroovyCompile]] | groovyc로 그루티 테스트 소스 컴파일 |
| compile//소스셋//Groovy | compile//소스셋//Java | [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.GroovyCompile.html|GroovyCompile]] | 주어진 소스셋 컴파일 |
| groovydoc | - | [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.javadoc.Groovydoc.html|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 소스 디렉토리를 추가한다.(기존값에 더하는 것임)
}
}
}
''srcDir''은 [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/SourceDirectorySet.html#srcDir%28java.lang.Object%29|SourceDirectorySet.srcDir()]] 메소드이다.
====== 의존성 관리 ======
''groovy'' 라는 의존성 구성이 추가된다.
* Gradle과는 무관하게 원하는 Groovy 버전을 선택할 수 있다.
* Gradle이 컴파일/문서 생성시 사용하는 ''groovyc''와 ''groovydoc''은 지정된 버전의 것을 사용하게 된다.
* 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 플러그인은 소스셋에 다음 프라퍼티들을 추가한다.
[[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.GroovySourceSet.html|GroovySourceSet]] 타입이 선언한 프라퍼티들이다.
^프라퍼티 이름 ^타입 ^기본값 ^설명 ^
| groovy | [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/SourceDirectorySet.html|SourceDirectorySet]] (read-only) | not null | 이 소스셋의 Groovy 소스 파일. 모든 *.groovy와 *.java를 포함하며 다른 것들은 제외시킨다. |
|groovy.srcDirs | Set [[gradle:files|Gradle 파일 다루기]] 참조 | [//projectDir///src///name///groovy] | 이 소스셋의 Groovy 소스를 포함하는 디렉토리 목록. Java 소스도 있을 수 있다.]] |
| allGroovy | [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileTree.html|FileTree]] (read-only) | not null | 이 소스셋의 모든 Groovy 파일. 오직 ''.groovy'' 파일만 포함한다. |
Groovy 플러그인은 몇몇 소스셋 프라퍼티들을 수정한다.
^프라퍼티 이름 ^변경사항 ^
| allJava | Groovy 소스 디렉토리의 모든 *.java 파일을 이 프라퍼티에 추가시킨다. |
| allSource | Groovy 소스 디렉토리의 모든 소스 파일을 이 프라퍼티에 추가시킨다. |
===== CompileGroovy =====
Groovy 플러그인은 프로젝트의 각 소스셋에 [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.compile.GroovyCompile.html|GroovyCompile]] 인스턴스를 추가한다. 이는 ''Compile'' 태스크를 상속한다. 이 태스크는 Ant Groovyc 태스크에 컴파일을 위임한다.
CompileGroovy의 프라퍼티들은 다음과 같다.
^태스크 프라퍼티 ^타입 ^기본값 ^
| classpath | [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileCollection.html|FileCollection]] | //소스셋//.compileClasspath |
| source | [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileTree.html|FileTree]] | //소스셋//.groovy
| destinationDir | File | //소스셋//.output.classesDir |
| groovyClasspath | [[http://www.gradle.org/docs/current/javadoc/org/gradle/api/file/FileCollection.html|FileCollection]] | groovy configuration |
===== 컴파일 옵션들 =====
* http://nobeans-en.blogspot.de/2009/12/how-to-specify-character-encoding-in.html
* 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
}
* [[http://blog.freeside.co/2014/06/24/enabling-groovys-invokedynamic-support-in-gradle/|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.