Gradle-종속성의 최신 릴리스 버전 가져 오기


93

Gradle다음 을 말하는 가장 쉬운 방법은 무엇입니까?

'junit'종속성을 검색하고 최신 '릴리스'버전을 가져옵니다.

Maven 및 Ivy 저장소를 관리하는 것은 나에게 일종의 새로운 일입니다. 다음 단계를 시도했지만 Could not resolve dependency ...오류가 발생했습니다.

  • compile "junit:junit:latest.release"저장소 만로 설정하여 작성 합니다 mavenCentral() (그러나 "junit : junit : 4.10"이라고 말하면 작동 함).

  • compile "junit:junit:latest.release"다음과 같은 방법으로 저장소 세트로 작성 하십시오.

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
    
  • Spring Source Ivy 저장소를 사용하려고 시도했습니다.

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }
    

내가 뭔가를 오해했을 수도 있습니다. 최신 버전의 종속성을 얻는 것이 왜 그렇게 어려운 작업입니까?


동적 버전은 사용 가능한 최신 버전 인 latest.integration. 동적 버전에 대한 gradle 문서
Bhavik

답변:


48

Gradle은 현재 Maven RELEASE(거의 사용되지 않고 더 이상 사용되지 않음)을 지원하지 않지만 Ivy의 latest.release. 그러나 일반적인 권장 사항은 정확한 버전에 대해 빌드하는 것입니다. 그렇지 않으면 빌드가 복권이 될 수 있습니다.


Maven은 RELEASE도 지원하지 않습니다. 고정 된 버전 번호 만.
khmarbaise 2012

10
두 번 확인했습니다. Maven은 지원하지 RELEASE버전 2와 3 모두에서
피터 Niederwieser

당신이 옳습니다. 플러그인 버전에서 Maven 3의 경우 더 이상 RELEASE / LATEST를 허용하지 않는다고 착각했습니다. 그러나 이러한 버전 식별자를 사용하는 것은 물론 나쁜 습관입니다.
khmarbaise

Maven 릴리스 저장소의 아티팩트는 가능한 모든 자동화 (및 아마도 수동) 테스트를 완료 한 것입니다. 이 프로세스에는 API 호환성 검사, 회귀 테스트 등이 포함되어야합니다. 그렇다면 빌드가 복권이 될 수있는 이유는 무엇입니까? 충분히 테스트되지 않은 아티팩트를 "릴리스"하는 경우에만.
RCross

2
Grade는 'latest.release'를 지원합니다 ( 'RELEASE'는 지원하지 않음). 이것은 자신의 내부 라이브러리가 가장 최근의 검증 된 버전인지 확인하는 데 매우 유용합니다. 물론 Peter가 위에서 제안한 것과 같은 이유로 외부 / 타사 라이브러리에 대한 사용을 옹호하지 않습니다.
RCross

257

예를 들어 자신의 종속성을 자주 릴리스하는 경우 최신 릴리스를 얻는 것이 때때로 매우 유용 할 수 있습니다.

다음과 같은 최신 버전을 얻을 수 있습니다.

compile "junit:junit:+"

또는 적어도 다음과 같은 주 버전을 지정하는 것이 좋습니다.

compile "junit:junit:4.+"

27
기록을 위해서 : 그것은 실제로 큰 따옴표 여야합니다! 대부분의 종속성 선언에 작은 따옴표를 사용 code 'junit:junit:4.+'
했지만

1
@azonli 적어도 로컬 종속성에 대해 작은 따옴표로 나를 위해 일하는 것 같습니다. 어떤 오류가 발생합니까?
David Moles

3
"컴파일"대신 "testCompile"이어야하지 않습니까? 유물은 릴리스에 필요하지 않기 때문에
마틴 Dürrmeier에게

6
항상 재현 가능한 빌드가 필요한 것은 아닙니다.
Lakatos Gyula

2
@SimonForsberg ... 사실이지만 개발이 미흡 할 때는 (a) 최첨단을 따르 거나 (b) v 4.+에 대한 버그 수정 이 프로젝트에 대한 최신 상태로 유지되도록 할 수 있습니다. 알파, 베타, -RC 또는 -RELEASE 단계에 도달 하면 나는 그 버전을 기둥 에 ' 못을 박 아야 ' 한다는 데 전적으로 동의합니다 . 나는 properties' file to set version specifiers: 컴파일 "junit : junit : $ { junitVer }"`를 사용합니다.

25

Gradle-Versions-Plugin을 확인하십시오. 원하는 것을 정확히 수행합니다 : https://github.com/ben-manes/gradle-versions-plugin

설치는 github 페이지를 참조하십시오. 기본적으로 build.gradle-프로젝트 파일에 다음 두 줄을 추가해야합니다.

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

그런 다음 프로젝트 디렉토리의 터미널에서 다음 명령을 실행하여 플러그인을 사용할 수 있습니다.

./gradlew dependencyUpdates -Drevision=release

그리고 어떤 의존성이 오래된 것인지 보여줄 것입니다!


모든 프로젝트에 플러그인을 포함하지 않으려는 경우 initscript에 추가 할 수도 있습니다. 자세한 내용 은 다른 질문에 대한 이 답변을 참조 하십시오.
Laurence Gonsalves

종속성이 동일한 저장소에 있고 항상 최신 버전을 원하면 어떻게해야합니까?
Barry Kelly

8

최신 Gradle 사용 설명서에서는 플러스 로그인 버전을 언급하고 설명합니다.

7.2 부터 . 종속성 선언 :

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

... 빌드 스크립트는 또한 프로젝트의 테스트를 컴파일하려면 모든 junit> = 4.0이 필요하다고 명시합니다.

에서 23.7. 종속성 해결 작동 방식 :

종속성이 동적 버전 (예 : 1. +)으로 선언 된 경우 Gradle은이를 저장소에서 사용 가능한 최신 정적 버전 (예 : 1.2)으로 해결합니다. Maven 리포지토리의 경우 maven-metadata.xml 파일을 사용하여 수행되는 반면 Ivy 리포지토리의 경우 디렉터리 목록을 통해 수행됩니다.


1
중요한 힌트 : +가 반드시 최신 버전을 사용하는 것은 아닙니다. 위의 내 의견을 참조하십시오.
Harry G.

3

Android Studio에서 :

당신이 사용하는 경우 +버전에 대한, 및 버전을 알고 싶은 실제로 사용되는 선택 Project의 사이드 바에서, 다음에서 External Libraries당신이 사용중인 실제 버전 번호를 볼 수 있습니다.


특정 IDE를 언급하고 있습니까? :-)
Inego

Inego : 예, 나는 ;-) 대답에 추가
lenooh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.