사용자 도구

사이트 도구


gradle

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle [2014/01/21 10:49]
kwon37xi [빌드 정보 확인]
gradle [2022/04/29 22:47] (현재)
kwon37xi [명령 실행과 옵션]
줄 1: 줄 1:
 ====== Gradle ====== ====== Gradle ======
   * http://www.gradle.org/   * http://www.gradle.org/
 +  * https://plugins.gradle.org/
   * [[http://maven.apache.org/|Maven]]을 대체할 수 있는 프로젝트 구성/관리 및 Build tool.   * [[http://maven.apache.org/|Maven]]을 대체할 수 있는 프로젝트 구성/관리 및 Build tool.
   * [[http://kwon37xi.egloos.com/4747016|Maven을 넘어 Gradle로 가자]] - Maven 대신 Gradle을 써야하는 이유   * [[http://kwon37xi.egloos.com/4747016|Maven을 넘어 Gradle로 가자]] - Maven 대신 Gradle을 써야하는 이유
줄 8: 줄 9:
   * [[http://www.gradle.org/tooling|Gradle과 각종 개발 도구 플러그인]]   * [[http://www.gradle.org/tooling|Gradle과 각종 개발 도구 플러그인]]
   * [[http://evgeny-goldin.com/wiki/Gradle|Gradle - Evgeny Goldin]]   * [[http://evgeny-goldin.com/wiki/Gradle|Gradle - Evgeny Goldin]]
-  * 이 문서는 현재 **Gradle 1.2** 사용자 가이드를 기준으로 하고 있다.+
 ===== 설치 ===== ===== 설치 =====
   * 설치 파일 압축을 풀고 설치 경로를 ''GRADLE_HOME'' 환경변수로 설정   * 설치 파일 압축을 풀고 설치 경로를 ''GRADLE_HOME'' 환경변수로 설정
   * ''GRADLE_OPTS''에 Gradle 전용 JVM 옵션 설정   * ''GRADLE_OPTS''에 Gradle 전용 JVM 옵션 설정
 +  * ''GRADLE_USER_HOME'' : 없으면 ''$HOME/.gradle''. 여기에 의존 *.jar 파일등이 저장된다.
   * ''JAVA_OPTS''에 자바 애플리케이션 공용 JVM 옵션 설정   * ''JAVA_OPTS''에 자바 애플리케이션 공용 JVM 옵션 설정
   * ''*.build'' 파일의 인코딩   * ''*.build'' 파일의 인코딩
줄 20: 줄 22:
 export GRADLE_OPTS="-Dfile.encoding=UTF-8 -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m" export GRADLE_OPTS="-Dfile.encoding=UTF-8 -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m"
 </code> </code>
 +
 +<code sh>
 +# Gradle의 의존성 jar 파일이나 기타 파일들을 저장하는 저장소. 기본은 $HOME/.gradle
 +export GRADLE_USER_HOME="..."
 +</code>
 +===== 실행속도 높이기 =====
 +  * ''${HOME}/.gradle/gradle.properties''<code properties>
 +org.gradle.daemon=true
 +</code>
 +  * 이제부터 Gradle이 데몬으로 떠서 실행되기 때문에 초기 로딩 시간이 줄어든다.
 +  * 3시간동안 Gradle 작업이 없으면 데몬이 자동 종료된다.
 +
  
 ===== 스크립트에서 사용할 인증 정보 분리해두기 ===== ===== 스크립트에서 사용할 인증 정보 분리해두기 =====
줄 39: 줄 53:
 </code> </code>
  
-===== build setup ===== +===== build Init ===== 
-  * [[http://www.gradle.org/docs/current/userguide/build_setup_plugin.html|BuildSetup Plugin]]+  * [[https://docs.gradle.org/current/userguide/build_init_plugin.html|Build Init Plugin]]
   * 프로젝트를 시작할 때 ''gradle init''를 실행하면 현재 디렉토리에 Gradle 관련 기본 파일들을 생성해준다.(구버전은 setupBuild)   * 프로젝트를 시작할 때 ''gradle init''를 실행하면 현재 디렉토리에 Gradle 관련 기본 파일들을 생성해준다.(구버전은 setupBuild)
   * Maven 프로젝트 디렉토리에서 실행하면 자동 컨버팅을 실행한다.   * Maven 프로젝트 디렉토리에서 실행하면 자동 컨버팅을 실행한다.
   * 실행시 프로젝트 구조를 Java library로 지정하기(1.7 이후)<code sh>   * 실행시 프로젝트 구조를 Java library로 지정하기(1.7 이후)<code sh>
-gradle init --type java-library+gradle init --type java-application
  
 # --type 을 생략하면 basic 으로 지정된다. # --type 을 생략하면 basic 으로 지정된다.
줄 51: 줄 65:
     * pom     * pom
     * basic     * basic
 +    * java-application
     * java-library     * java-library
 +    * groovy-application
     * groovy-library     * groovy-library
     * scala-library      * scala-library 
줄 63: 줄 79:
 </code> </code>
 ===== 명령 실행과 옵션 ===== ===== 명령 실행과 옵션 =====
 +  * [[https://docs.gradle.org/current/userguide/command_line_interface.html|Gradle Command line interface]]
   * 기본적으로 gradle을 통해 실행되는 단위를 "Task 태스크"라고 한다.(Ant의 target, Maven의 phase와 유사한 개념)   * 기본적으로 gradle을 통해 실행되는 단위를 "Task 태스크"라고 한다.(Ant의 target, Maven의 phase와 유사한 개념)
   * 태스크는 의존 관계에 따라 단 한 번만 실행된다.   * 태스크는 의존 관계에 따라 단 한 번만 실행된다.
줄 79: 줄 96:
   * ''%%--%%gui'' : GUI 환경에서 태스크를 실행하고 관리한다.   * ''%%--%%gui'' : GUI 환경에서 태스크를 실행하고 관리한다.
   * ''%%--%%recompile-scripts'' : build.gradle들 다시 컴파일한다.   * ''%%--%%recompile-scripts'' : build.gradle들 다시 컴파일한다.
 +  * ''%%--%%no-daemon'' : [[gradle:daemon|Gradle Daemon]] 끄기
 +  * ''%%--%%project-cache-dir=/path/to/project-cache'' : 기본적으로 프로젝트 바로 아래에 ''.gradle''로 생성되는 프로젝트별 캐시디렉토리 경로 변경
 +  * ''%%--warning-mode all%%'' : 모든 경고 켜기
 +  * 환경변수 ''TERM=dumb''으로 하면 Gradle의 진행 상황 로그가 안나오게 된다.
 +  * Task 상세 도움말은 ''help %%--%%task [태스크이름]'' 으로 볼 수 있다.<code sh>
 +gradle help --task wrapper  
 +</code>
 +
 ===== 빌드 정보 확인 ===== ===== 빌드 정보 확인 =====
   * ''projects'' : 프로젝트 목록   * ''projects'' : 프로젝트 목록
줄 93: 줄 118:
     * ''%%--%%all'' : 태스크 그룹에 상관없이 다 보여줌     * ''%%--%%all'' : 태스크 그룹에 상관없이 다 보여줌
   * ''[자식프로젝트명:]dependencies'' : Root 혹은 지정 프로젝트의 의존성 트리를 보여준다.   * ''[자식프로젝트명:]dependencies'' : Root 혹은 지정 프로젝트의 의존성 트리를 보여준다.
 +    * ''--configuration runtime'' : runtime 의존성만 보여준다.
   * ''[자식프로젝트명:]properties'' : Root 혹은 지정 프로젝트의 속성 값들을 모두 보여준다.   * ''[자식프로젝트명:]properties'' : Root 혹은 지정 프로젝트의 속성 값들을 모두 보여준다.
   * ''%%--%%profile'' : 빌드 수행을 프로파일링하여 성능 정보를 ''./build/reports/profile'' 디렉토리에 저장한다.   * ''%%--%%profile'' : 빌드 수행을 프로파일링하여 성능 정보를 ''./build/reports/profile'' 디렉토리에 저장한다.
줄 184: 줄 210:
     emailNotification = 'build@master.org'     emailNotification = 'build@master.org'
 } }
 +
 +// 가변 Key, 가변 값 형태로 코드를 통해 프라퍼티를 추가할 때는 아래 방식을 사용한다.
 +project.ext['keyname'] = 'value'
  
 task hello << { task hello << {
줄 195: 줄 224:
   * 모든 빌드 스크립트는 컴파일하여 ''.gradle'' 에 저장하고 캐시된다.   * 모든 빌드 스크립트는 컴파일하여 ''.gradle'' 에 저장하고 캐시된다.
   * 빌드 파일이 변경되면 그 때 재컴파일 한다.   * 빌드 파일이 변경되면 그 때 재컴파일 한다.
-  * ''--recompile-scripts'' 옵션을 주면 강제 재컴파일 한다.+  * ''%%--%%recompile-scripts'' 옵션을 주면 강제 재컴파일 한다.
  
 ===== 이것 저것 ===== ===== 이것 저것 =====
줄 308: 줄 337:
 1 1
 5 5
 +</code>
 +
 +==== 외부 빌드 스크립트에서 메소드 선언 노출시키기 ====
 +  * [[https://stackoverflow.com/questions/18715137/extract-common-methods-from-gradle-build-script|build.gradle - Extract common methods from Gradle build script - Stack Overflow]]
 +<code>
 +// Define methods as usual
 +def commonMethod1(param) {
 +    return true
 +}
 +def commonMethod2(param) {
 +    return true
 +}
 +
 +// Export methods by turning them into closures
 +ext {
 +    commonMethod1 = this.&commonMethod1
 +    otherNameForMethod2 = this.&commonMethod2
 +}
 +
 +// -- 실제 build.gradle 에서는
 +apply from: "$rootDir/helpers/common-methods.gradle"
 +
 +
 +task myBuildTask {    
 +    def myVar = commonMethod1("parameter1")
 +    otherNameForMethod2(myVar)    
 +}
 </code> </code>
  
 ==== 캐싱 cache ==== ==== 캐싱 cache ====
-Gradle은 컴파일한 스크립트를 캐싱한다. 프로젝트에서 처음으로 빌드를 실행하면 ''.gradle'' 디렉토리가 만들어지고 거기에 컴파일된 스크립트가 들어간다. 다음에 다시 빌드를 실행하면 스크립트에 변경이 없다면 컴파일 해뒀던 것을 실행한다. 그렇지 않으면 재 컴파일을 하고 캐시에 새로운 버전이 들어간다. ''--recompile-scripts'' 옵션으로 실행하면 캐시를 삭제하고 모두 다시 컴파일해서 캐시에 새로 저장한다.+Gradle은 컴파일한 스크립트를 캐싱한다. 프로젝트에서 처음으로 빌드를 실행하면 ''.gradle'' 디렉토리가 만들어지고 거기에 컴파일된 스크립트가 들어간다. 다음에 다시 빌드를 실행하면 스크립트에 변경이 없다면 컴파일 해뒀던 것을 실행한다. 그렇지 않으면 재 컴파일을 하고 캐시에 새로운 버전이 들어간다. ''%%--%%recompile-scripts'' 옵션으로 실행하면 캐시를 삭제하고 모두 다시 컴파일해서 캐시에 새로 저장한다.
  
 ===== 자세히 살펴보기 ===== ===== 자세히 살펴보기 =====
줄 328: 줄 384:
   * [[gradle:init_scripts|Gradle Initialization Scripts]]   * [[gradle:init_scripts|Gradle Initialization Scripts]]
   * [[gradle:wrapper|Gradle Wrapper]]   * [[gradle:wrapper|Gradle Wrapper]]
 +  * [[gradle:shell_completion|Gradle Shell Completion]]
   * [[gradle:from_maven|Maven에서 Gradle로]]   * [[gradle:from_maven|Maven에서 Gradle로]]
   * [[gradle:jpa_metamodel_generation|Gradle에서 JPA2 MetaModel 생성]]   * [[gradle:jpa_metamodel_generation|Gradle에서 JPA2 MetaModel 생성]]
gradle.1390268959.txt.gz · 마지막으로 수정됨: 2014/01/21 10:49 저자 kwon37xi