2014-12-03 4 views
1

provided 종속 범위가 다음과 같이 구성되었습니다. 내 문제는 제공되는 종속성이 런타임에 런타임에 표시되지 않는다는 것입니다. 의존성을 유지하기 위해 이것을 어떻게 구성 할 수 있습니까? provided 그러나 테스트 클래스 패스에서 사용할 수 있습니까?Gradle을 사용하여 클래스 패스 테스트에 제공된 종속성을 추가합니다.

apply plugin: 'java' 

configurations { 
    provided 
} 

sourceSets { 
    main { 
     compileClasspath += configurations.provided 
    } 
} 

dependencies { 
    provided 'com.google.guava:guava:18.0' 
    provided 'org.apache.commons:commons-lang3:3.3.2' 

    // Tests 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.assertj:assertj-core:1.7.0' 

    // Additional test compile dependencies 
    testCompile 'joda-time:joda-time:2.2' 
} 

하나의 해결책은 testCompile 범위와 joda 시간 라이브러리와 같은 의존성을 추가하는 것입니다,하지만 난 어떤 항목을 복제하고 싶지 않아요. 나는 그것이 적절한 구성으로 달성 될 수 있다고 확신합니다.

답변

3

configurations에 추가 행 1 개가 고정되어 있습니다. 그것이 최상이고 적절한 해결책인지는 모르지만 의도 한대로 작동합니다.

configurations { 
    provided 
    testCompile.extendsFrom(provided) 
} 
3

두 가지 방법이 있습니다. 먼저 testRuntime 구성을 provided까지 확장하십시오.

configurations { 
    provided 
    testRuntime.extendsFrom(provided) 
} 

둘째, 당신은 당신의 test 작업의 클래스 경로에 provided 구성을 추가 할 수 있습니다.

test { 
    classpath += configurations.provided 
} 
+0

두 구성을 사용하더라도 테스트를 실행할 수 없습니다. 예를 들어 Joda Time을 제공하고 어떤 구성을 사용하든 관계없이 'Gradle : error : package org.joda.time does not exist' – tomrozb

+0

이 컴파일 또는 런타임 종속성이 있습니까? 컴파일 종속성 인 경우'sourceSets.test.compileClasspath + = configurations.provided'를 사용하여 원본 게시물에서 지정한 것처럼 지정해야합니다. –

+0

여전히 작동하지 않습니다. 그것은 컴파일하지만 런타임 중에 java.lang.NoClassDefFoundError : org/joda/time/ReadableInstant'를 얻습니다. 응답에 게시 된 옵션으로 시도했지만 유일한 변경은'testRuntime.extendsFrom (제공됨) '이지만'java로 인해 충돌합니다. lang.NoClassDefFoundError : junit/textui/ResultPrinter' 아이디어가 있습니까? – tomrozb

관련 문제