Dmi*_*sky 6 java gradle maven maven-shade-plugin
我正在尝试构建一个与HBase通信的Dropwizard(Jersey)REST端点.虽然这些是我唯一的两个顶级依赖项,但这两个依赖项都加载了许多冲突的传递依赖项.这种冲突的一个简单例子是谷歌的番石榴:
Dropwizard不适用于版本11,HBase不适用于版本18.
我已经检查了Maven shade插件文档,但它似乎没有让你重新定位依赖jar中找到的类.所以我不知道如何解决这个问题,而不是将这两个组件分成单独的JVM.
这是一个肮脏的解决方案。但你可以...
创建一个项目/模块,在其中定义一组服务接口,dropwizard 应用程序将使用这些接口与 HBase 进行通信。
创建另一个模块/项目来实现这些接口并使用 HBase 类。为这个项目遮光。
在您的 Dropwizard 项目中仅包含界面 jar,但创建一个任务以将着色工件复制到您的资源中。
为您的着色 HBase 客户端工件创建一个 JARClassLoader。您可能必须创建一个特殊的子类,该子类不会委托给父类,因为默认情况下,类加载器将要求父类解析链接,并可能从外部类加载器中提取较新版本的番石榴。
向 Jar 加载程序索要服务合同的实例...
Businessing api = Class.forName("com.awesome.Businessing", true, jarLoader).newInstance();