如何解决尝试在Java中编译和运行示例模块时出错
我是模块主题的新手,我在关注一个如何创建,编译和运行它们的简单示例。
我的项目的文件夹结构如下图所示:
首先,我在cmd窗口中键入此内容以编译module-info.java和Task.java文件:
javac --module-path mods -d feeding feeding/zoo/animal/feeding/Task.java feeding/module-info.java
然后我尝试使用以下代码运行代码:
java --module-path feeding --module zoo.animal.feeding/zoo.animal.feeding.Task
我收到以下错误:
Error occurred during initialization of boot layer
java.lang.module.FindException: Error reading module: feeding
Caused by: java.lang.module.InvalidModuleDescriptorException: Task.class found in top-level directory (unnamed package not allowed in module)
有人可以解决吗?另外,--module-path
和java
命令中的javac
选项的作用是什么?
这是类和模块描述符的代码:
module zoo.animal.feeding {
}
public class Task {
public static void main(String... args) {
System.out.println("All fed!");
}
}
解决方法
根据错误消息的内容来解决问题很简单。
由以下原因引起:java.lang.module.InvalidModuleDescriptorException: 在顶级目录中找到Task.class(不允许使用未命名的程序包) 在模块中)
使用模块路径,项目的顶级目录中不允许使用类。因此,根据目录结构,您的Task.java
文件应包含程序包描述,并且看起来像-
package zoo.animal.feeding;
public class Task {
public static void main(String... args) {
System.out.println("All fed!");
}
}
将继续编译(从mods
和feeding
所在的命令行目录进行),例如:
javac -d mods feeding/module-info.java feeding/zoo/animal/feeding/Task.java
应该帮助您将.class
下相应目录中的相关mods
文件作为输出文件夹。然后,使用以下java命令执行应该可以按预期工作。
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。