不
在模块路径的同一目录中不可能有两个同名的模块。官方文档并没有将这些信息放在特别突出的位置 - 它是JavadocModuleFinder::of
给出的:
如果一个目录包含多个具有相同名称的模块,则会发生错误。
我为模块系统创建了一个小型演示项目,它通过创建同一模块的两个版本来涵盖这种情况......
jar --create
--file mods/monitor.observer.beta-1.0.jar
--module-version 1.0
-C classes/monitor.observer.beta .
jar --create
--file mods/monitor.observer.beta-2.0.jar
--module-version 2.0
-C classes/monitor.observer.beta .
...然后在下一个编译中引用该文件夹...
javac
--module-path mods
-d classes/monitor.statistics
$(find monitor.statistics -name '*.java')
...正如预期的那样导致以下错误消息:
error: duplicate module on application module path
module in monitor.observer.beta
1 error
注意我说的是同一个目录。跨目录多个模块是可能的。
是的
模块系统仅在目录中强制执行唯一性。再次来自ModuleFinder::of
(强调我的):
模块查找器通过按数组索引顺序搜索每个目录、展开的模块或打包的模块来定位模块。它找到具有给定名称的模块的第一次出现,并忽略序列中稍后出现的具有该名称的其他模块。
这使得在不同的目录中有相同的模块成为可能。