I am currently working on a project in Spark 2.1.0 and I need to import a library on which Spark itself already depends. In particular, I want org.roaringbitmap:RoaringBitmap:0.7.42
to replace org.roaringbitmap:RoaringBitmap:0.5.11
(the library on which both org.apache.spark:spark-core_2.11:2.1.0.cloudera1
and org.apache.spark:spark-sql_2.11:2.1.0.cloudera1
depend on).
My dependencies in build.gradle
are the following
dependencies {
compile 'org.apache.spark:spark-core_2.11:2.1.0.cloudera1'
runtime ('org.apache.spark:spark-core_2.11:2.1.0.cloudera1') {
exclude group: 'org.roaringbitmap'
}
compile 'org.apache.spark:spark-sql_2.11:2.1.0.cloudera1'
runtime ('org.apache.spark:spark-sql_2.11:2.1.0.cloudera1') {
exclude group: 'org.roaringbitmap'
}
compile 'org.roaringbitmap:RoaringBitmap:0.7.42'
implementation 'org.roaringbitmap:RoaringBitmap'
constraints {
implementation('org.roaringbitmap:RoaringBitmap:0.7.42') {
because 'because of transitive dependency'
}
}
}
The output of gradle -q dependencyInsight --dependency org.roaringbitmap
shows that dependency has been updated
org.roaringbitmap:RoaringBitmap -> 0.7.42
variant "default+runtime" [
org.gradle.status = release (not requested)
Requested attributes not found in the selected variant:
org.gradle.usage = java-api
]
\--- compileClasspath
org.roaringbitmap:RoaringBitmap:0.5.11 -> 0.7.42
variant "default+runtime" [
org.gradle.status = release (not requested)
Requested attributes not found in the selected variant:
org.gradle.usage = java-api
]
\--- org.apache.spark:spark-core_2.11:2.1.0.cloudera1
+--- compileClasspath
+--- org.apache.spark:spark-sql_2.11:2.1.0.cloudera1
| \--- compileClasspath
\--- org.apache.spark:spark-catalyst_2.11:2.1.0.cloudera1
\--- org.apache.spark:spark-sql_2.11:2.1.0.cloudera1 (*)
Unfortunately, when I run my application with spark2-submit
the actual version of the runtime dependency is org.roaringbitmap:RoaringBitmap:0.5.11
.
How can I force my application to use the desired version of RoaringBitmap?