我有一个典型的传递依赖问题,找不到解决方案。
我的项目使用spark
和hadoop-tools
依赖性。
spark
使用hadoop-mapreduce-client-core
并
hadoop-tools
使用hadoop-core
hadoop-core
和hadoop-mapreduce-client-core
相互冲突。换句话说,hadoop-mapreduce-client-core
是hadoop-core
(mapreduce1)的较新版本(mapreduce2)。
在此项目中,我将有一些可执行文件,它们运行spark
作业,另一些可执行文件Distcp
(取决于hadoop-tools
)。如何在build.gradle
中指定这种关系/依赖性/强制,以便spark
流和hadoop-tools
流在运行时都能找到自己的依赖性。
答案 0 :(得分:1)
如果您在2个不同的jar中有具有相同FQCN的类,并且希望在不同的场景中继续使用它们(因为它们的工件ID有所不同),那么最好的,干净的方法是将其分解为一个单独的模块。
请参阅Gradle Multi-Project版本
https://docs.gradle.org/current/userguide/multi_project_builds.html