为什么Java无法运行类错误在启动层初始化期间发生 - 未找到模块mod

时间:2017-10-14 18:28:31

标签: java java-9

我已经完成了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)

我错过了什么吗?

4 个答案:

答案 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