문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
gradle:organizing_build_logic [2012/10/06 16:00] kwon37xi [buildSrc 프로젝트의 소스 빌드하기] |
gradle:organizing_build_logic [2015/01/21 11:47] kwon37xi [apply] |
||
---|---|---|---|
줄 74: | 줄 74: | ||
* '' | * '' | ||
- | // build.gralde이 없어도 아래 빌드 스크립트가 존재하는 것으로 간주한다. | + | |
+ | // --build.gralde이 없어도 아래 빌드 스크립트가 존재하는 것으로 간주한다.-- | ||
+ | // 1.6 버전에서는 명시적으로 필요한 것으로 보인다. | ||
apply plugin: ' | apply plugin: ' | ||
dependencies { | dependencies { | ||
줄 84: | 줄 86: | ||
이 말은 '' | 이 말은 '' | ||
- | 좀 더 복잡한 것이 필요하다면 자신만의 '' | + | 좀 더 복잡한 것이 필요하다면 자신만의 '' |
* '' | * '' | ||
+ | apply plugin: ' | ||
repositories { | repositories { | ||
mavenCentral() | mavenCentral() | ||
줄 94: | 줄 96: | ||
// gradle과 groovy에 관한 의존성은 추가할 필요가 없다. | // gradle과 groovy에 관한 의존성은 추가할 필요가 없다. | ||
dependencies { | dependencies { | ||
+ | compile gradleApi() | ||
+ | groovy localGroovy() | ||
testCompile group: ' | testCompile group: ' | ||
} | } | ||
줄 104: | 줄 108: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ===== JDBC Driver 로딩 못하는 문제 ===== | ||
+ | * Gradle 1.6에서 '' | ||
+ | * http:// | ||
+ | repositories { | ||
+ | mavenCentral() | ||
+ | } | ||
+ | configurations { | ||
+ | driver | ||
+ | } | ||
+ | dependencies { | ||
+ | driver group: ' | ||
+ | } | ||
+ | |||
+ | URLClassLoader loader = GroovyObject.class.classLoader | ||
+ | configurations.driver.each {File file -> | ||
+ | loader.addURL(file.toURL()) | ||
+ | } | ||
+ | |||
+ | // JDBC Driver 사용하는 코드 혹은 custom task/plugin 제작 | ||
+ | </ | ||
+ | |||
===== 공유 스크립트 ===== | ===== 공유 스크립트 ===== | ||
[[: | [[: | ||
===== 커스텀 태스크 ===== | ===== 커스텀 태스크 ===== | ||
- | [[gradle: | + | [[gradle: |
===== 커스텀 플러그인 ===== | ===== 커스텀 플러그인 ===== | ||
[[gradle: | [[gradle: | ||
===== 외부 빌드 실행 ===== | ===== 외부 빌드 실행 ===== | ||
- | ===== 외부 | + | [[http:// |
+ | * 다른 빌드를 실행하기 '' | ||
+ | task build(type: GradleBuild) { | ||
+ | buildFile = ' | ||
+ | tasks = [' | ||
+ | } | ||
+ | </ | ||
+ | * '' | ||
+ | task hello << { | ||
+ | println "hello from the other build." | ||
+ | } | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q build | ||
+ | hello from the other build. | ||
+ | </ | ||
+ | ===== 빌드 스크립트 전용 외부 라이브러리 ===== | ||
+ | 빌드 스크립트가 외부 라이브러리를 필요로 한다면 '' | ||
+ | |||
+ | * 빌드 스크립트의 외부 의존성 지정하기 | ||
+ | buildscript { | ||
+ | repositories { | ||
+ | mavenCentral() | ||
+ | } | ||
+ | dependencies { | ||
+ | classpath group: ' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | 빌드 스크립트의 클래스패스는 **'' | ||
+ | |||
+ | 빌드 스크립트 클래스패스를 지정한 위에는 빌드스크립트에서 해당 클래스를 마음대로 사용할 수 있다. | ||
+ | |||
+ | * 외부 의존 클래스 사용하는 빌드 스크립트 '' | ||
+ | import org.apache.commons.codec.binary.Base64 | ||
+ | |||
+ | buildscript { | ||
+ | repositories { | ||
+ | mavenCentral() | ||
+ | } | ||
+ | dependencies { | ||
+ | classpath group: ' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | task encode << { | ||
+ | def byte[] encodedString = new Base64().encode(' | ||
+ | println new String(encodedString) | ||
+ | } | ||
+ | </ | ||
+ | * 실행하면 < | ||
+ | > gradle -q encode | ||
+ | aGVsbG8gd29ybGQK | ||
+ | </ | ||
+ | |||
+ | * 멀티 프로젝트에서는 프로젝트 빌드 스크립트의 의존성이 모든 서브프로젝트에도 적용된다. | ||
+ | * 멀티 프로젝트에서 최상위 프로젝트의 '' | ||
+ | ===== Ant 의존성 추가 ===== | ||
+ | 빌드 스크립트의 외부 의존성 추가 방식으로는 Ant에 의존성을 추가할 수 없다. | ||
+ | |||
+ | * Ant에 의존성 추가 '' | ||
+ | configurations { | ||
+ | ftpAntTask | ||
+ | } | ||
+ | |||
+ | dependencies { | ||
+ | // ant-commons-net의 maven pom.xml이 잘못돼 있어서 ant-commons-net의 추가 의존성을 직접 지정해줬다. | ||
+ | ftpAntTask(" | ||
+ | module(" | ||
+ | dependencies " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | task ftp << { | ||
+ | ant { | ||
+ | taskdef(name: | ||
+ | classname: ' | ||
+ | classpath: configurations.ftpAntTask.asPath) // 여기서 추가된 클래스패스 사용! | ||
+ | ftp(server: " | ||
+ | fileset(dir: | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== apply ===== | ||
+ | '' | ||
+ | |||
+ | <code groovy> | ||
+ | apply from: ' | ||
+ | </ | ||
+ | |||
+ | 이 방식을 사용할 경우 [[ci: | ||
+ | 아래와 유사한 오류가 발생할 것이다. | ||
+ | < | ||
+ | A problem occurred evaluating script. | ||
+ | Could not open buildscript class cache for script ' | ||
+ | Timeout waiting to lock buildscript class cache for script ' | ||
+ | It is currently in use by another Gradle instance. | ||
+ | Owner PID: unknown | ||
+ | Our PID: 15314 | ||
+ | Owner Operation: unknown | ||
+ | Our operation: | ||
+ | Lock file: / | ||
+ | </ | ||
+ | 이 때 해결책은 빌드 스크립트 URL의 맨 뒤에 Random 값을 넣어주는 것이다. 마지막의 '' | ||
+ | <code groovy> | ||
+ | apply from: " | ||
+ | </ | ||
+ | 이 경우 계속해서 빌드 스크립트 캐시가 서로 다른이름으로 생성되어 파일 갯수가 증가하게 된다. | ||
+ | ''/ | ||
+ | <code sh> | ||
+ | find / | ||
+ | </ |