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

问题描述

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

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

@H_502_7@
  • 模块伪影 ,即模块化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错误
    错误“找不到主类”