我正在尝试构建一个与Dropwizard (泽西岛) REST端点进行通信的HBase。虽然这是我仅有的两个顶级依赖项,但这两个依赖项都加载了许多冲突的传递依赖项。谷歌的番石榴就是这种冲突的一个简单例子:
Dropwizard将不使用version 11,而HBase将不使用version 18。
我已经检查了Maven shade插件文档,但它似乎不允许您重新定位依赖jars中的类。因此,我不知道如何解决这个问题,除非将这两个组件分离成单独的JVM。
发布于 2015-06-18 20:59:42
这是个肮脏的解决方案。但你可以..。
创建一个项目/模块,您可以在其中定义一组服务接口,您的下拉向导应用程序将使用这些接口与HBase对话。
创建另一个实现这些接口并使用HBase类的模块/项目。遮住这个项目。
在Dropwizard项目中,只包含接口jar,但是创建一个任务将阴影工件复制到资源中。
为您的阴影JARClassLoader客户端工件创建一个HBase。您可能必须创建一个特殊的子类,该子类在默认情况下不委托父类,类加载器将请求父类解析链接,并可能从外部类加载器中提取较新版本的番石榴。
请求Jar加载程序提供服务合同的实例.
Businessing api = Class.forName("com.awesome.Businessing", true, jarLoader).newInstance();
发布于 2015-06-19 05:41:01
尝试在您的<dependencyManagement/>部分pom.xml中为这些依赖项指定具体版本。
https://stackoverflow.com/questions/30768120
复制相似问题