英文:
Error while trying to compile and run sample module in Java
问题
以下是您要翻译的内容:
我对模块的主题还不熟悉,正在按照一个简单的示例来学习如何创建、编译和运行它们。
我的项目的文件夹结构如下图所示:
(图片链接已省略)
首先,我在命令提示符窗口中键入以下内容,以编译 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
我得到了以下错误:
在引导层初始化期间发生错误
java.lang.module.FindException: 读取模块时出错:feeding
Caused by: java.lang.module.InvalidModuleDescriptorException: 在顶级目录中找到 Task.class(无法在模块中使用未命名包)
有人能解决这个问题吗?此外,java
和 javac
命令中的 --module-path
选项的作用是什么?
这是类和模块描述符的代码:
module zoo.animal.feeding {
}
public class Task {
public static void main(String... args) {
System.out.println("All fed!");
}
}
英文:
I'm new to the topic of modules, and I'm following a simple example of how to create, compile and run them.
The folder structure of my project is illustrated in the following diagram:
First I typed this in a cmd window to compile the module-info.java and Task.java files:
javac --module-path mods -d feeding feeding/zoo/animal/feeding/Task.java feeding/module-info.java
Then I tried to run the code with the following:
java --module-path feeding --module zoo.animal.feeding/zoo.animal.feeding.Task
I get the following error:
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)
Can someone resolve this? Also, what is the role of the --module-path
option in both the java
and javac
commands?
This is the code for the class and the module descriptor:
module zoo.animal.feeding {
}
public class Task {
public static void main(String... args) {
System.out.println("All fed!");
}
}
答案1
得分: 4
很容易根据错误消息的提示来解决问题。
> Caused by: 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
应该能够在mods
文件夹下的相应目录中得到相关的 .class
文件作为输出。然后,使用以下java命令执行时应该会按预期工作。
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
英文:
It's pretty straight forward to solve as per what the error message reads.
> Caused by: java.lang.module.InvalidModuleDescriptorException:
> Task.class found in top-level directory (unnamed package not allowed
> in module)
Using the modulepath, a class is not allowed in the top-level directory of the project. So based on the directory structure, your Task.java
file should include package description and look like -
package zoo.animal.feeding;
public class Task {
public static void main(String... args) {
System.out.println("All fed!");
}
}
The compilation(from the command line directory where mods
and feeding
reside) would continue such as:
javac -d mods feeding/module-info.java feeding/zoo/animal/feeding/Task.java
should help you relevant .class
files in the corresponding directories under mods
as output folder. Then your execution using the following java command should work as expected.
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论