Java 9:在模块路径上可能有两个名称相同的模块

问题描述

模块系统的JEP 261描述模块路径如下:

模块路径是一个序列,其每个元素可以是 模块定义 或包含模块定义的目录。每个模块定义为

  • 模块伪影 ,即模块化JAR文件或包含一编译模块定义一个JMOD文件,或者

  • 一个 展开模块目录 ,其名称是,按照惯例,该模块的名称和它的内容是“爆炸”对应于包层次目录树。

然后描述模块解析机制:

在模块路径中搜索特定名称的模块时,模块系统会采用该名称的模块的第一个定义。版本字符串(如果存在)将被忽略; 构建工具和容器应用程序有责任配置模块路径,以避免版本冲突。解决版本选择问题不是模块系统的目标。

如前所述,这意味着只有 在同一目录中 存在两个具有相同名称的模块时,编译器才会进行投诉。

解决方法

在模块路径上是否可以有两个名称完全相同(但内容稍有不同)的模块?

据我所知,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将不知道使用哪个版本?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”