lang

Gradle 환경구성

C/H 2016. 11. 30. 08:30

# build.gradle

# 환경구성
configurations {
    conf1
}

// 변경성 모듈: 의존관계 모듈은 계속 바뀌는 경우가 있다.
// 특수한 모듈을 사용할 경우 그레이들은 해당 버전을 해결한 결과를 24시간 캐시한다.
// 아래는 캐시 기간을 설정한다.
configurations.conf1.resolutionStrategy.cacheDynamicVersionsFor 1, 'minutes'    // conf1 환경 동적 버전 캐시 간격
configurations.conf1.resolutionStrategy.cacheChangingMoulesFor 5, 'hours'   // conf1 변경성 모듈 캐시 간격    

// 의존관계 정의
dependencies {
    // conf1환경 구성에 libs/sample-lib.jar을 의존관계로 지정한다.
    conf1 files("libs/sample-lib.jar")
}

// 기능을 showDeps를 실행하면 프로젝트가 의존하는 JAR파일 경로가 표시된다.
// gradle showDeps
task showDeps << {
    configurations.conf1.each {
        println it.absolutePath
    }
}

gradle에서 지원하는 의존관계 지정 방법

  • 외부모듈

    인터넷의 저장소(예: maven, jcenter)에서 파일을 내려받는다. 저장소 정의를 따로 해야 한다.

    repositories {
        mavenCenteral()
    }
    
    dependencies {
        conf1 'org.slf4j:slf4j-api:1.7.5'
        // conf1 group: 'org.slf4j', name: 'slf4j-api', version: '1.7.5'
    
        // conf1 'org.slf4j:slf4j-api:1.7.+'   // 1.7대 버전중 최신 버전
        // conf1 'commons-cli:commons-cli:latest.integration'  // 전체 최신 버전
        // conf1 'junit:junit:latest.release'  /// 안정 버전중 최신 버전
    }
    
    repositories {
        # maven
        maven {
            // POM 파일은 이 URL에서 가져온다.
            url "http://company-repositories-2.example.com/maven"
            // JAR파일 위치
            artifactUrls "http://company-repositories-2.example.com/maven/jars"
            // 또 다른 JAR파일 위치
            artifactUrls "http://company-repositories-2.example.com/maven/jars2"
            // 계정
            credentials {
                username 'user'
                password 'password'
            }
        }
        maven {
            url "http://company-repositories-2.example.com/maven2"
            credentials {
                username repositoryUser
                password repositoryPass
            }
            // ~/.gradle/gradle.properties
            // repositoryUser=username
            // repositoryPass=password
        }
    
        # maver local 
        mavenCentral()
    
        # jcenter
        jcenter()
    
        # ivy
        ivy {
            // 저장소 위치
            url "http://example.com/ivy-repo"
            // 저장소 구조
            layout "maven"
            // 계정
            credentials {
                username 'user'
                password 'password'
            }  
        }
    
        #file
        flatDir {
            // libs/doc-repo 지정
            dirs  "libs", "doc-repo"
        }
    }
    

  • 파일
    dependencies {
        conf1 files("libs/sample-lib.jar")
        // 모든 jar파일이 의존관계 대상이 된다.
        // conf1 fileTree(dir: "libs", include: "**/*.jar")
    }
    
  • 프로젝트

    특정 프로젝트에서 다른 프로젝트의 결과물을 참조한다(멀티 프로텍즈 사용).

    dependencies {
        compile project(':shared')
    }
    
  • Gradle API

    현재 사용 중인 API가 포함된 라이브러리 파일 의존관계(직접 그레이들의 플러그인이나 태스크를 신규로 작성할 때 사용한다).

    dependencies {
        conf1 gradleApi()
    }
    

  • Local Groovy

    현재 사용중인 Groovy(그레이들에 내장된) 의존관계(그레이들 API 의존관계와 같이 플러그인이나 태스크를 직접 신규로 작성할 대 사용한다).

    dependencies {
        conf1 localGroovy()
    }
    

경합

  • Newest 전략 Default

    버전 경합이 발생하면 가장 최신 버전의 의존관계를 사용한다.

  • Fail 전략

    버전 경합이 발생하면 예외를 발행해서 빌드 실패를 유도한다.

configurations {
    conf1
    testConf1.extendsFrom conf1     // testConf1은 conf1의 의존관계도 포함
}

configurations.testConf1 {
    resolutionStrategy {
        failOnVersionConflict() // Fail 전략 도입
    }
    /*
    // resolutionStrategy, solutionStrategy  2개 모두 사용한지는 모르겠다.
    solutionStrategy {
        failOnVersionConflict() // Fail 전략 도입
        force 'org.hamcrest:hamcrest-core:1.3'  // testConf1에서 Hamcrest 요구시 반드시 1.3 사용
        // 경합 버전과 상관없는 1.2를 지정할 수 있다.
    }
    */
}

dependencies {
    conf1 group: 'org.ccodehaus.groovy', name: 'groovy-all', version: '2.3.1'
    /*
    conf1 group: 'org.ccodehaus.groovy', name: 'groovy-all', version: '2.3.1' {
        force = true // 버전 경합 시 반드시 의존관계를 사용한다.
    }
    */
    testConf1 group: 'org.spockframework', name: 'spock-core', version: '0.7-groovy-2.0'
    {
        exclude module: 'groovy-all'    // groovy-all은 무시한다. (전이적 의존관계 제외)
    }
}

// 같은 모듈에 여러 버전이 강제 지정되면 처음 설정이 사용된다.


반응형

'lang' 카테고리의 다른 글

Golang windows path  (0) 2019.01.15
GetText 로컬라이즈 방법, ko.po, ko.mo  (0) 2016.12.30
Gradle, Groovy, Scala Install  (0) 2016.11.27
더 나은 프로그래머가 될 수 있는 7팁!  (0) 2016.01.14
AutoHotKey  (0) 2007.09.11