Java9模块系统常见错误

官方Jigsaw模块系统文档

java命令,具体可用参数使用 java --help

用法:java [options] <主类> [args...]
(执行类)
或 java [options] -jar <jar 文件> [args...]
(执行 jar 文件)
或 java [options] -m <模块>[/<主类>] [args...]
java [options] --module <模块>[/<主类>] [args...]
(执行模块中的主类)
或 java [options] <源文件> [args]
(执行单个源文件程序)

将主类、源文件、-jar <jar 文件>、-m 或
--module <模块>/<主类> 后的参数作为参数
传递到主类。

Error occurred during initialization of boot layer. java.lang.module.FindException: Module com.greetings\com.greetings.Main not found

众所周知,使用java执行模块里的入口类的命令是:java -m 模块/包名.主类
这样运行java --module-path mods -m com.greetings\com.greetings.Main2 会导致如下错误;
错误的原因那就是反斜杠(\)更改为正斜杠(/)
还需要注意-m参数模块名后面是包结构,可不是目录结构,需要注意。表现形式为:-m 模块名/包名.主类

Error occurred during initialization of boot layer
java.lang.module.FindException: Module com.greetings\com.greetings.Main not found

javac --module-path mods -d mods\com.greetings com\greetings\Main.java com\greetings\module-info.java 命令的组织枚举

--module-path:指定搜索模块目录的路径,这个路径下一级的目录需要都是模块目录(JDK9的模块)。
-d 指定生成的class放在哪个目录里面,通常指定mods\模块目录。注意了,这里指定的是放置的位置。

-d mods\xxx.xxx 这里的目录名不需要跟模块名称同名,只是方便组织所以同名了,
当你通过java命令调用的时候,-m参数的后面是模块名称,而不是这个目录名称,切记。

后面的就是待生成class的源文件了。

可以使用java --module-path mods --list-modules可以看到mods下都有哪些模块。
只有module-info.java文件内容的module后面的标识符是模块名称。

module 模块名称 {}

jigsaw模块系统文档和视频

posted @ 2022-12-31 17:37  星小梦  阅读(286)  评论(0编辑  收藏  举报