尝试在 Java 中编译和 运行 示例模块时出错
Error while trying to compile and run sample module in Java
我是模块主题的新手,我正在学习如何创建、编译和 运行 它们的简单示例。
我项目的文件夹结构如下图所示:
首先我在 cmd window 中输入了这个来编译模块-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
命令中的作用是什么?
这是 class 和模块描述符的代码:
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)
使用模块路径,项目的 top-level 目录中不允许 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
应该会帮你在mods
下相应目录下的相关.class
文件作为输出文件夹。然后使用以下 java 命令执行应该会按预期工作。
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
我是模块主题的新手,我正在学习如何创建、编译和 运行 它们的简单示例。
我项目的文件夹结构如下图所示:
首先我在 cmd window 中输入了这个来编译模块-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
命令中的作用是什么?
这是 class 和模块描述符的代码:
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)
使用模块路径,项目的 top-level 目录中不允许 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
应该会帮你在mods
下相应目录下的相关.class
文件作为输出文件夹。然后使用以下 java 命令执行应该会按预期工作。
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task