Gradle :: runtime.exclude 组:'org.apache.hadoop' 影响测试范围?
Gradle :: runtime.exclude group: 'org.apache.hadoop' affects test scope?
我的 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
}
运气不好。
我在这里错过了什么?
在 gradle 范围内,test
继承自 runtime
。您的测试代码排除了 minicluster 依赖项,因为运行时将其排除在外。
请参阅此图了解 java 插件的范围继承树:
您可能不想将全局排除项添加到运行时配置中,而是希望将 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'
}
我的 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
}
运气不好。
我在这里错过了什么?
在 gradle 范围内,test
继承自 runtime
。您的测试代码排除了 minicluster 依赖项,因为运行时将其排除在外。
请参阅此图了解 java 插件的范围继承树:
您可能不想将全局排除项添加到运行时配置中,而是希望将 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'
}