从project Jigsaw的快速入门教程中,似乎module-info.java会转到一个带有模块名称的目录中,例如,对于包含类myclass的模块my.module:
bin/
my.module/
module-info.class
my/
module/
MyClass.class
然后,仍然按照教程,在调用MyClass(假设它有方法
)时,模块路径选项被赋予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
在模块路径中,它也可以工作,如教程中所述)。
现在,当我尝试使用Java9模块用Eclipse创建一个Maven项目时,module-info.Java位于src/man/Java
目录中,Module-info.class位于target/classes
目录中。因此,现在包含module-info.class文件的目录与模块的名称没有关系。
但是,在第一种情况下,当我编写java-p path/to/bin-m my.module/my.module.myclass
时,这意味着Java将在模块路径的目录中查找目录。
我觉得我错过了一些重要的东西。对于Java在模块路径中的目录中查找模块的方式有明确的解释吗?什么真正指定了一个模块?(我的印象是:不是目录,只有模块-info.java)。
令我更加困惑的是:Oracle文档指出:
但显然这并不是全部,至少Eclipse不是如何使用这个选项的。
注意:我见过这个问题,但它并没有真正的帮助:一个答案说module-info.java放在src/java/中,另一个答案说它放在一个名称为模块名的目录中。显然两者都是正确的,但它们没有解释为什么,而且有一个明显的矛盾。
来自java.lang.module.moduleFinder#of(path...)
的文档:
返回一个模块查找器,该模块查找器通过搜索一系列目录和/或打包模块来定位文件系统上的模块。给定数组中的每个元素都是以下元素之一:
>
使用--module-path path/to/bin
时,路径条目被视为模块目录。这是因为bin
目录(即顶级目录)中没有module-info.class
文件。
my.module
目录重命名为任何您想要的目录;modulefinder
只是查看目录,看看是否存在module-info.class
文件。当您使用--module-path path/to/bin/my.module
时,路径条目被视为分解模块。这是因为在my.module
目录(即顶级目录)中存在一个module-info.class
文件。
大家好 php -m 显示结果里有 mylsqlnd 但是,ldd /usr/bin/php 显示结果里没有mysql ldconfig -v |grep mysql ldconfig -p |grep mysql 显示结果里也没有, extension_dir 里只有opcache.so 这是为什么呢?
我给出作为输入文件,一些方法将使用它,但是现在我的reader方法无法检测该文件。 我要将文件放置在哪个目录中....我是否必须在中制定任何maven规范,以检测文件是否存在,并且他们必须读取该文件。
因此,当我试图通过另一个类MainFX运行gui时,我遇到了一些错误(我将尝试解决这些错误,但这并不是这个问题的意义所在): 正是在这一点上,我尝试添加一个module-info.java,并解决了IntelliJ捕获的所有导入依赖项,添加了一些模块依赖项: 所以我的module-info.java不能编译,如果没有module-info.java文件,我就不能运行JavaFX,这可能在没有mod
我正在学习JavaFx并尝试制作一个可重用的组件。该项目正在VSCode中开发。该项目非常简单,涉及启动器和可重用组件。我正在重构,当添加模块时,一切都停止了工作,我无法继续重构。 module-info中显示的错误是:< code>javafx.controls无法解析为模块。虽然很奇怪,但是如果我告诉Maven更新项目,在一些罕见的情况下,错误会告诉我模块是空的或者不存在。 源代码(实验分支)
我刚开始使用Java16,似乎不明白为什么我不能访问资源文件。我进行了一些故障排除,以缩小范围,至少在我似乎有问题的地方。 我正在使用IntelliJ IDEA 2021.2构建#IU-212.4746.92 我创建了一个新项目,我选择了带有OpenJDK 16的JavaFX。 然后,它用三个主文件创建项目,一个应用程序类、一个控制器类和一个FXML文件。创建项目后,我进入POM文件,选择了Jav
问题内容: 假设我有一个使用Maven 3和junit的Java项目。有和目录分别包含主要来源和测试来源(所有内容都是标准的)。 现在,我想将项目迁移到Java9。内容表示Java 9模块。有看大约是这样的: 如果测试代码本身需要怎么办?例如,添加对某些模块的依赖关系,该依赖关系仅用于测试,而对于生产代码则不需要。在这种情况下,我必须把以给模块不同的名称。这样,Maven似乎将主源和测试源视为不同