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

标签 java javac java-11 java-platform-module-system module-info

我是模块主题的新手,我正在关注如何创建、编译和运行它们的简单示例。
我的项目的文件夹结构如下图所示:
osfar's project directory structure
首先我在一个 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!");
    }
}

最佳答案

根据错误消息读取的内容非常简单地解决。

Caused by: java.lang.module.InvalidModuleDescriptorException: Task.class found in top-level directory (unnamed package not allowed in module)


使用模块路径,项目的顶级目录中不允许有一个类。因此,根据目录结构,您的 Task.java文件应该包括包描述,看起来像 -
package zoo.animal.feeding;
public class Task {
    public static void main(String... args) {
        System.out.println("All fed!");
    }
}
编译(来自 modsfeeding 所在的命令行目录)将继续进行,例如:
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

关于java - 尝试在 Java 中编译和运行示例模块时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63687412/

相关文章:

java - 在 Java 6 中编译,在 Java 7 中运行——如何指定 useLegacyMergeSort?

java-11 - Tomcat 10 - jakarta.faces - Tomcat 无法启动

java - JNA 函数指针作为结构体字段

Java 命令有效,但 javac 命令无效

java - ToolProvider.getSystemJavaCompiler() 返回 null - 仅安装 JRE 时可用?

java - 如何解决java.lang.NoClassDefFoundError : javax/xml/bind/JAXBException

java - 如何配置java在jdk 9、10和11中应使用的DNS服务器

java - Android Java 通过 WebView 上传文件而不使用 FileChooser

java - 线性插值 - 音频音调偏移

java - 如何使用 Bazel 指定 Java 版本