Gradle :: runtime.exclude group: 'org.apache.hadoop' 影响测试范围?
Posted
技术标签:
【中文标题】Gradle :: runtime.exclude group: \'org.apache.hadoop\' 影响测试范围?【英文标题】:Gradle :: runtime.exclude group: 'org.apache.hadoop' affects test scope?Gradle :: runtime.exclude group: 'org.apache.hadoop' 影响测试范围? 【发布时间】:2017-06-02 02:39:08 【问题描述】:我的 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
运气不好。
我在这里错过了什么?
【问题讨论】:
【参考方案1】:在 gradle 作用域中,test
继承自 runtime
。您的测试代码排除了 minicluster 依赖项,因为运行时排除了它。
请参阅此图了解 java 插件的范围继承树:
您可能希望将 spark 依赖项添加到自 gradle 2.12 起可用的 compileOnly
范围依赖项中,而不是向运行时配置添加全局排除。
configurations
compileOnly 'org.apache.spark:spark:2.11'
test 'org.apache.hadoop:hadoop-minicluster:2.7.2'
gradle manual 中提供了有关 gradle 作用域的更多信息:
或者,您可以添加另一个从运行时继承的配置,并为其添加排除项,然后将其用作 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'
【讨论】:
我最终做了类似的事情 - 添加了另一个配置参考,排除了那些 hadoop/spark 组和传递 deps,并在shadowJar
插件执行中使用了该配置。非常感谢图表和解释!以上是关于Gradle :: runtime.exclude group: 'org.apache.hadoop' 影响测试范围?的主要内容,如果未能解决你的问题,请参考以下文章
简单理解Gradle,Gradle是什么,一分钟入门Gradle
GroovyGradle 环境搭建 ( 下载 Gradle 工具 | 查找本地缓存的 Gradle 工具 | 配置 Gradle 环境变量 )
Android Gradle 插件Gradle 构建工具简介 ① ( Gradle 环境配置 | 官网下载 Gradle 软件包 | 在本地用户目录下查找 | 配置 Gradle 环境变量 )
Android Gradle 插件Gradle 依赖管理 ① ( org.gradle.api.Project 配置 | Android Gradle 插件配置与 Gradle 配置关联 ) ★