不
在模块路径上的同一目录中不可能有两个同名的模块。官方文档并没有将这些信息放在一个特别突出的位置 - 它是ModuleFinder::的
Javadoc,它给出了它:
如果目录包含多个具有相同名称的模块,则会出现错误。
我为模块系统创建了一个小型演示项目,它通过创建同一模块的两个版本来涵盖这种情况......
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
(强调我的):
模块查找器通过按数组索引顺序搜索每个目录、分解模块或打包模块来查找模块。它查找具有给定名称的模块的第一个匹配项,并忽略序列后面出现的该名称的其他模块。
这样就可以在不同的目录中使用相同的模块。