尝试在Java中编译和运行示例模块时出错

尝试在Java中编译和运行示例模块时出错,java,javac,java-11,java-platform-module-system,module-info,Java,Javac,Java 11,Java Platform Module System,Module Info,我对模块这个话题还不熟悉,下面是一个如何创建、编译和运行模块的简单示例 我的项目的文件夹结构如下图所示: 首先,我在cmd窗口中键入此命令以编译module-info.java和Task.java文件: javac——模块路径mods-d feeding feeding/zoo/animal/feeding/Task.java feeding/module-info.java 然后,我尝试使用以下代码运行代码: java——模块路径喂养——模块zoo.animal.feeding/zoo.a

我对模块这个话题还不熟悉,下面是一个如何创建、编译和运行模块的简单示例

我的项目的文件夹结构如下图所示:

首先,我在cmd窗口中键入此命令以编译module-info.java和Task.java文件:

javac——模块路径mods-d feeding feeding/zoo/animal/feeding/Task.java feeding/module-info.java
然后,我尝试使用以下代码运行代码:

java——模块路径喂养——模块zoo.animal.feeding/zoo.animal.feeding.Task
我得到以下错误:

启动层初始化期间发生错误 java.lang.module.FindException:读取模块:馈送时出错 原因:java.lang.module.InvalidModuleDescriptorException:在顶级目录中找到Task.class(模块中不允许使用未命名的包) 有人能解决这个问题吗?另外,
--module path
选项在
java
javac
命令中的作用是什么

这是类和模块描述符的代码:

模块zoo.animal.feeding{
}
公共类任务{
公共静态void main(字符串…参数){
System.out.println(“所有fed!”);
}
}

根据错误消息的内容来解决这个问题非常简单

原因:java.lang.module.InvalidModuleDescriptorException: 在顶级目录中找到Task.class(不允许使用未命名的包 模块内)

使用modulepath,项目的顶级目录中不允许类。因此,基于目录结构,您的
Task.java
文件应该包含包描述,如下所示-

package zoo.animal.feeding;
public class Task {
    public static void main(String... args) {
        System.out.println("All fed!");
    }
}
编译(从
mods
feed
所在的命令行目录)将继续进行,例如:

javac -d mods feeding/module-info.java feeding/zoo/animal/feeding/Task.java
应帮助您将
mods
下相应目录中的相关
.class
文件作为输出文件夹。然后,使用下面的java命令执行应该可以正常工作

java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
--模块路径
的角色记录在这两个工具的
-帮助
部分中。