问题描述
模块系统的JEP 261描述模块路径如下:
模块路径是一个序列,其每个元素可以是 模块定义 或包含模块定义的目录。每个模块定义为
然后描述模块解析机制:
在模块路径中搜索特定名称的模块时,模块系统会采用该名称的模块的第一个定义。版本字符串(如果存在)将被忽略; 构建工具和容器应用程序有责任配置模块路径,以避免版本冲突。解决版本选择问题不是模块系统的目标。
如前所述,这意味着只有 在同一目录中 存在两个具有相同名称的模块时,编译器才会进行投诉。
解决方法
在模块路径上是否可以有两个名称完全相同(但内容稍有不同)的模块?
据我所知,Java 9编译器没有对此抱怨。我有2个模块声明如下:
module com.dj.helper {
exports com.dj.helper;
}
两者都包含com.dj.helper
包装,但包装内的内容不同。然后在我的主应用程序中,我希望导入此模块:
module com.dj {
requires com.dj.helper;
}
具有相同名称的两个模块都在我的模块路径上。
我希望在编译com.dj
模块时,编译器会抱怨同一模块存在两次,但事实并非如此。这是否有效地意味着您可以在模块路径上使用同一jar的2个版本,而Java将不知道使用哪个版本?