gradle 传递依赖冲突

gradle transitive dependency conflict

我遇到了一个典型的传递依赖问题,但找不到解决方案。

我的项目使用 sparkhadoop-tools 依赖项。 spark 使用 hadoop-mapreduce-client-corehadoop-tools 使用 hadoop-core

hadoop-corehadoop-mapreduce-client-core 相互冲突。换句话说,hadoop-mapreduce-client-corehadoop-core (mapreduce1) 的更新版本 (mapreduce2)。

在这个项目中,我将有一些运行 spark 作业的可执行文件和一些运行 Distcp 的可执行文件(取决于 hadoop-tools)。我如何在 build.gradle 中指定此 relationship/dependency/force,以便 spark 流和 hadoop-tools 流在运行时找到它们自己的依赖项。

如果您 类 在 2 个不同的 jar 中有相同的 FQCN,并且您想在不同的场景中继续使用它们(因为它们的 Artifact Id 不同),那么最好和干净的方法可以实现这一点是分解成一个单独的模块。

请参考Gradle多项目构建

https://docs.gradle.org/current/userguide/multi_project_builds.html