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类路径和测试
任务类路径中来实现。两种解决方案大致相同。