【发布时间】:2020-11-01 22:04:54
【问题描述】:
问题
我有module-info.java 文件,看起来像:
module server {
...
// split package issue: lot of java classes within packages with the same name
requires hbase.common;
requires hbase.client;
...
}
解决方法 1
maven-shader-plugin无法解决问题,因为它不知道groupId,只知道包名。意味着着色器将从 hbase.common 和 hbase.client 重命名相同的包 - 拆分包问题仍然存在。
解决方法 2
我还尝试创建一些shader 中间层模块,以丢弃不需要的包并解决拆分包问题。但是这个解决方案也行不通。
shader/module-info.java:
module shader {
requires hbase.common;
// exports only packages I do need at my code. Shade unneded packages
// IS THERE ANY WAY TO MAKE IT WORK?
// Got: X module reads package org.apache.hadoop.hbase.util from both shader and hbase.common
exports org.apache.hadoop.hbase.util;
}
服务器/模块信息.java
module server {
requires shader;
requires hbase.client;
}
PS
是否有任何用于组合拆分包 jar 的 Maven 插件?
【问题讨论】:
-
(1) 如果您不介意头痛 --> stackoverflow.com/questions/42358084/… (2) 否则,请删除您的
module-info.java文件,直到这些依赖项与拼图兼容。 -
你能补充一下,你用的是什么版本的hbase客户端,普通的还是其他的?
-
@assylias 我不能丢弃 Java9 的模块,因为我需要类似 OSGI 的行为。意味着我在 hadood 和 jetcd 之间存在传递依赖冲突,我希望通过使用模块来解决它们
-
对你来说可能不是个好消息hbase.apache.org/book.html#java
-
@VolodymyrBakhmatiuk 只是大声思考,一种方法(合并 jars)可能是将它们打包到另一个项目中(maven),然后将该工件用作实际模块化代码的依赖项。 (如前所述,我也没有尝试过。但是如果导出的包是否已排序,您可以figure this out by generating module-info using jdeps。)
标签: java compiler-errors hbase java-9 java-platform-module-system