我在build.gradle中有以下内容:
configurations {
runtime.exclude group: 'org.apache.spark'
runtime.exclude group: 'org.apache.hadoop'
}
由于某种原因,这也排除了测试类路径中的所有Hadoop / Spark代码。如果我注释掉这个配置 - 测试通过正常,否则我会遇到各种java.lang.NoClassDefFoundError: org/apache/hadoop/hdfs/MiniDFSCluster$Builder
问题。
我试着用这个:
test {
classpath += configurations.compile
}
没有运气。
我在这里缺少什么?
答案 0 :(得分:2)
在gradle范围界定中,test
继承自runtime
。您的测试代码不包括minicluster依赖项,因为运行时将其排除。
除了将全局排除添加到运行时配置之外,您可能希望将spark依赖性变为compileOnly
范围内的依赖关系,这可以从gradle 2.12开始提供。
configurations {
compileOnly 'org.apache.spark:spark:2.11'
test 'org.apache.hadoop:hadoop-minicluster:2.7.2'
}
有关gradle范围的更多信息,请参见gradle manual:
或者,您可以添加从运行时继承的另一个配置,并向其添加排除项,然后将其用作shadowJar的基础。如果您想要选择性地构建一个包含或不捆绑了spark依赖关系的jar,这可能会有所帮助。您的测试将使用没有排除项的配置,但您打包的jar不会包含spark依赖项。
configurations {
sparkConfiguration {
extendsFrom runtime
exclude group: 'org.apache.hadoop'
exclude group: 'org.apache.spark'
}
}
task sparkExcludedJar(type: ShadowJar) {
group = "Shadow"
configurations = [project.configurations.sparkConfiguration]
classifier = 'sparkExcluded'
}