首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中编译和运行示例模块时出错

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

Stack Overflow用户
提问于 2020-09-01 12:11:52
回答 1查看 213关注 0票数 4

我对模块这个话题很陌生,我正在学习如何创建、编译和运行这些模块的简单示例。

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

首先,我在cmd窗口中输入了它来编译模块-info.java和Task.java文件:

代码语言:javascript
复制
javac --module-path mods -d feeding feeding/zoo/animal/feeding/Task.java feeding/module-info.java

然后,我尝试使用以下代码运行代码:

代码语言:javascript
复制
java --module-path feeding --module zoo.animal.feeding/zoo.animal.feeding.Task

我得到以下错误:

代码语言:javascript
复制
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选项在javajavac命令中扮演什么角色?

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

代码语言:javascript
复制
module zoo.animal.feeding {
}
代码语言:javascript
复制
public class Task {
    public static void main(String... args) {
        System.out.println("All fed!");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 15:57:58

根据错误消息读取的内容来解决是非常直接的。

由:在顶层目录中找到的java.lang.module.InvalidModuleDescriptorException: Task.class引起的

(模块中不允许未命名的包)

使用modulepath,不允许在项目的顶层目录中使用类.因此,根据目录结构,您的Task.java文件应该包括包描述,并类似于-

代码语言:javascript
复制
package zoo.animal.feeding;
public class Task {
    public static void main(String... args) {
        System.out.println("All fed!");
    }
}

编译(来自modsfeeding所在的命令行目录)将继续进行,例如:

代码语言:javascript
复制
javac -d mods feeding/module-info.java feeding/zoo/animal/feeding/Task.java

应该帮助您相关的.class文件在相应的目录下的mods作为输出文件夹。然后,使用下面的java命令执行应该会像预期的那样工作。

代码语言:javascript
复制
java --module-path mods -m zoo.animal.feeding/zoo.animal.feeding.Task
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63687412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档