module-info.java进入哪个目录?

问题描述 投票:0回答:1

从项目Jigsaw的快速入门教程中,似乎module-info.java转到具有模块名称的目录,例如,包含类MyClass的模块my.module的目录。

bin/
    my.module/
        module-info.class
        my/
            module/
                MyClass.class

然后,仍然遵循本教程,在调用MyClass时(假设它具有method,则将模块路径选项赋予bin目录:

java -p path/to/bin -m my.module/my.module.MyClass

到目前为止,很好。

但是,如果我写:

java -p path/to/bin/my.module -m my.module/my.module.MyClass

而且我不明白为什么两者都起作用。

如果bin包含两个模块,这没有什么区别:如果两个目录都在模块路径中,则第二个版本仍然有效(并且,如果仅bin在模块路径中,则它也可以工作,如本教程中所述)。


现在,当我尝试使用Java 9模块使用Eclipse创建Maven项目时,module-info.java位于src/man/java目录中,而module-info.class同样位于target/classes中。因此,现在包含module-info.class文件的目录与模块名称无关。

并且target/classes也在模块路径中(当我检查构建配置时)。这类似于上面的第二种情况,java -p path/to/bin/my.module -m my.module/my.module.MyClass。因此,显然,Java仅使用module-info.class的内容来发现模块名称,并且目录名称是任意的?

但是,在第一种情况下,当我写java -p path/to/bin -m my.module/my.module.MyClass时,这意味着Java将在模块路径的目录内的目录中查找。

我觉得我缺少重要的东西。关于Java在模块路径的目录中查找模块的方式是否有明确的解释?真正指定模块的是什么? (我的印象是:不是目录,只有module-info.java)。


让我感到困惑的是:Oracle documentation指出:

-module-path modulepath ...或-p modulepath

用分号(;)分隔的目录列表,其中每个目录都是模块目录。

但是显然,这还不是全部,而且至少不是Eclipse在此选项下的用法。


注:我见过this question,但实际上并没有帮助:一个回答说module-info.java放在src / java /中,另一个回答说它去一个名称为模块名的目录。显然两者都是正确的,但是它们没有解释原因,并且存在明显的矛盾。

从项目Jigsaw的快速入门教程中,似乎module-info.java转到具有模块名称的目录,例如,对于包含类MyClass的模块my.module:bin / ...] >

java java-module module-path
1个回答
0
投票

摘自java.lang.module.ModuleFinder#of(Path...)的文档:

返回模块查找器,该查找器通过搜索目录和/或打包的模块序列来在文件系统上定位模块。给定数组中的每个元素都是以下之一:

© www.soinside.com 2019 - 2024. All rights reserved.