当前位置: 首页 > 面试题库 >

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

秦珂
2023-03-14
问题内容

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

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


问题答案:

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

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

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

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

然后描述模块解析机制:

在模块路径中搜索特定名称的模块时,模块系统会采用该名称的模块的第一个定义。版本字符串(如果存在)将被忽略;
如果模块路径的元素包含多个具有相同名称的模块的定义,则解析失败,并且编译器,链接器或虚拟机将报告错误并退出。
构建工具和容器应用程序有责任配置模块路径,以避免版本冲突。解决版本选择问题不是模块系统的目标。

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



 类似资料:
  • 当我编译react项目时,我有一个黄色的问题,但是下面的事情让我很不舒服 警告/节点_模块/React/cjs/React。发展js有多个模块,它们的名称只是大小写不同。在具有其他case语义的文件系统上编译时,这可能会导致意外行为。使用相等的外壳。比较这些模块标识符:*C:\cygwin64\home\waysolutions soft\curso\nodejs\react\node\u mod

  • 目录结构 成功编译并生成out/calc-module目录。 模块-info.java

  • 问题是我的控制器中有一个spring表单和两个具有相同属性的@ModelAttribute参数。表单的“commandName”参数设置为我的modelAttributes名称之一。令我惊讶的是,不仅将属性映射到用“commandName”指定的模型属性,还映射到第二个属性。 我还没有找到确切的解决方案,除了和我的相似之处:Spring-form多个表单具有相同的模型属性名称属性 但在我的例子中,

  • 我得到3个不同的错误。 无法确定模块名称... 未命名模块读取包... 模块org.reactivestreams读取包从两个... 这些错误到底是什么? 建筑格拉德尔 错误消息: 编译Java 错误:无法确定/Users/srihariprasad/的模块名称。gradle/caches/modules-2/files-2.1/io。github。resilience4j/resilience4

  • 问题内容: 假设我有一个包含模块的软件包: 并且这些模块需要引用彼此包含的功能。似乎我的模块遇到了问题,因为有一个同名的标准模块。 例如,在我的模块同时需要我和标准python 模块的情况下,我会遇到麻烦,因为解释器会在程序包内部查找并找到我的模块,然后再遇到标准模块。 有没有办法解决?这是不可以的情况,并且模块名称不能重复使用吗? 有关封装哲学的任何解决方案和意见在这里都将很有用。 问题答案:

  • rank ▲ ✰ vote url 53 400 168 184 url 从相对路径引入一个模块 怎么用相对路径引入一个模块? 例如,如果dirFoo包含Foo.py和dirBar,而dirBar包含Bar.py,怎么样才能在Foo.py里引入Bar.py? 结构: dirFoo\ Foo.py dirBar\ Bar.py Foo希望包含Bar,但是重新组织文件