====== 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.