我已经完成了java 9 jigsaw tutorial。我一直在努力运行类,java抛出错误 -
java --module-path mods -m mods/com.test/com.test.HelloWorld
Error occurred during initialization of boot layer
java.lang.module.FindException: Module mods not found
Javac命令 -
javac -d mods --module-source-path src $(find src -name '*.java')
我正在使用mac,java版本 -
$ java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
我错过了什么吗?
答案 0 :(得分:5)
从模块名称中删除其他mod -
java --module-path mods -m com.test/com.test.HelloWorld
答案 1 :(得分:3)
-m
标志接受您要运行的模块名称和主类。模块名称为com.test
,因此运行该类的命令应为:
java --module-path mods -m com.test/com.test.HelloWorld
--module-path mods
告诉java
在哪里搜索com.test
。
答案 2 :(得分:2)
当您第一次使用javac
命令编译代码时 -
javac -d mods --module-source-path src $(find src -name '*.java')
使用-d directory
确保的是
设置类文件的目标目录。
在您的情况下{/ 1}}文件夹
如果一个类是包的一部分,那么javac将类文件放在一个包中 反映包名称并创建目录的子目录 需要的。
因此,您可以在执行命令后查看mods目录,所有(mods
).class
将存在于相应的目录结构中,因为它们的包名称。
然后在下一个命令中指定了java
工具选项*.java
或--module-path module path
:
从分号分隔的(;)列表中搜索目录 目录。每个目录都是模块目录。
您列出的目录是-p module path
,假定您必须在入门链接后创建了该目录。
在您的命令中跟随mods
或--module modulename[/mainclass]
指定要解析的初始模块以及模块未指定时要执行的主类的名称。
在您的情况下,模块名称为-m module[/mainclass]
,主要类别为com.test
。
因此,命令的完整正确语法应为: -
com.test.HelloWorld
答案 3 :(得分:0)
感谢信息
我做错了两件事
1)像下面一样再次使用包路径
module \ package \ package.class
我们不应在执行类时重新键入包路径。
2)使用dos样式的反斜杠代替正斜杠。即使您在Windows环境中执行,我们也应始终使用正斜杠(/)将模块与类分开。
module / package.class