Java 使用Gradle将提供的依赖项添加到测试类路径

Java 使用Gradle将提供的依赖项添加到测试类路径,java,gradle,build.gradle,Java,Gradle,Build.gradle,我已经提供了如下配置的依赖范围。我的问题是,提供的依赖项在测试运行时不可见。我如何配置它以保持提供的依赖项,在测试类路径上可用 apply plugin: 'java' configurations { provided } sourceSets { main { compileClasspath += configurations.provided } } dependencies { provided 'com.google.guava:

我已经
提供了如下配置的
依赖范围。我的问题是,提供的依赖项在测试运行时不可见。我如何配置它以保持提供的依赖项
在测试类路径上可用

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'
}

一种解决方案是添加类似于joda时间库的依赖项,它具有
testCompile
scope,但我不想复制任何条目。我相信通过适当的配置可以实现这一点。

有两种方法可以做到这一点。首先,让
testRuntime
配置从提供的
扩展

configurations {
    provided
    testRuntime.extendsFrom(provided)
}
其次,您可以将
提供的
配置添加到
测试任务的类路径中

test {
    classpath += configurations.provided
}

配置
中增加了一行。不知道这是否是最好的和适当的解决方案,但效果与预期一致

configurations {
    provided
    testCompile.extendsFrom(provided)
}

即使使用这两种配置,我仍然无法运行测试。例如,在提供的情况下使用Joda Time,并且无论我获得哪种配置,这些编译依赖项或运行时依赖项都是不存在的
Gradle:error:package org.Joda.Time。如果它是编译依赖项,则需要像在原始帖子中使用
sourceset.test.compileClasspath+=configurations.provided
那样进行指定。但仍然不起作用。它可以编译,但在运行时,我得到了
java.lang.NoClassDefFoundError:org/joda/time/ReadableInstant
尝试了answer中发布的选项,唯一的更改是
testRuntime.extendsFrom(已提供)
但仍然与
java.lang.NoClassDefFoundError:junit/textui/ResultPrinter
发生冲突。有什么想法吗?在
配置中添加了
testCompile.extendsFrom(提供)
,效果非常好。您知道这样的配置是否正确,或者可能导致其他问题吗?您的jar是一个编译时需求,因此是的,它需要同时位于编译和运行时类路径上。这可以通过您添加的答案来实现,也可以通过将其添加到sourceSet类路径和
测试
任务类路径中来实现。两种解决方案大致相同。