启动层初始化时发生错误 寻找异常: 模块未找到

28

使用Java 9执行一个简单的“Hello World”程序会导致以下错误消息:

引导层初始化期间发生错误
java.lang.module.FindException: 未找到模块com.pantech.myModule

我执行的命令行是:

java --module-path bin -m com.pantech.myModule/com.pantech.myModule.HelloWorld

这个命令行是在我的bin目录的父目录中执行的,该目录包含所有.class字节码文件。

module-info.class文件位于bin目录中位于com.pantech.myModule目录中。 HelloWorld.class文件包含主方法,位于com.pantech.myModule目录中的包目录内。因此,HelloWorld.class文件的路径名为bin\com.pantech.myModule\com\pantech\myModule\HelloWorld.class

HelloWorld类位于com.pantech.myModule包中(包名与模块名相同)。

我正在使用Windows 10作为操作系统。从我所读的所有内容来看,上述命令行应该是正确的。有没有关于如何修复这个问题的建议?


1
编译后的模块文件在哪个目录中?看起来你需要添加到模块路径的目录是 bin\com.pantech.myModule - ernest_k
已编译的模块文件(module-info.class)位于bin \ com.pantech.myModule目录中。 - D. Pante
你能分享一下类定义(从包声明开始)和模块定义,以便能够复现上述问题吗?老实说,对于这样的实验,我参考了这里的快速入门。(你可能还需要交叉验证编译命令) - Naman
模块定义文件(module-info.java)位于com.pantech.myModule目录中,包含以下内容:module myModule {} HelloWorld文件的源代码包含以下内容:package com.pantech.myModule; public class HelloWorld { public static void main(String [] args) { System.out.println("Hello World from module"); } } - D. Pante
@D.Pante,tretegfdg的回答似乎指出了您所犯的错误。因此,我建议您也参考一下指南。在示例中,模块名称与包名称com.greetings相同,因此他们的命令有效。此外,请参阅https://docs.oracle.com/javase/9/tools/java.htm以获取有关使用的命令的更多详细信息。 - Naman
在Netbeans中,我只是使用了“清理和重建项目”功能,它就起作用了。 - SedJ601
14个回答

23
这是由于在创建自己的类时,您还接受了按照IDE规定创建默认类,在自己的类中编写代码后,出现了此类错误。为了消除这个问题,进入“项目”文件夹 → src → 默认包。只保留一个类(其中您编写了代码)并删除其他类。之后运行程序,它一定会没有任何错误。

11

在执行我的selenium测试时,我遇到了同样的问题,我将selenium依赖项从eclipse中的ModulePath移动到ClassPath下的Build path中,问题得到了解决!


1
我遇到了相同的问题,这个解决了它。 - bunkinet
谢谢Ankur,我也这么做了,问题解决了。 - mujib009

9

我遇到了相似的问题,我遇到的问题是将 selenium-server-standalone-3.141.59.jar 添加到了 modulepath 中,但它应该添加到 classpath中。

所以通过 (项目 -> 属性 -> Java 构建路径 -> 库) 选择 classpath 并添加下载的最新jar

添加后应该像这样

enter image description here

还需要为浏览器下载适当的驱动程序,我检查并下载了与Chrome版本相同的Chrome驱动程序,并将其添加到 C:\Program Files\Java

以下是对我有效的代码

public class TestuiAautomation {

    public static void main(String[] args) {

        System.out.println("Jai Ganesha");
        try {
            System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Java\\chromedriver.exe");
            System.out.println(System.getProperty("webdriver.chrome.driver"));
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("no-sandbox");
            chromeOptions.addArguments("--test-type");
            chromeOptions.addArguments("disable-extensions");
            chromeOptions.addArguments("--start-maximized");
            WebDriver driver = new ChromeDriver(chromeOptions);
            driver.get("https://www.google.com");
            System.out.println("Google is selected");
        } catch (Exception e) {
            System.err.println(e);
        }

    }
}

6
你说你的module-info.java包含了以下内容:
module myModule {}

这意味着它声明了一个名为myModule的模块,而不是com.pantech.myModule。用命令格式来指定:

 -m <module-name>/<main-class>

2
谢谢。问题已通过在module-info.java文件中将模块名称更改为com.pantech.myModule而不仅仅是myModule来解决。这个解决方案对我来说应该很明显,但我想我一直在寻找更隐晦的东西。 - D. Pante
2
你能否解释一下吗?我仍然无法弄清楚我应该做哪些更改。 - Bhaumik Bhatt

5

我遇到了同样的问题,并通过以下方式解决:

  1. 从eclipse中删除所有项目,但不要从电脑中删除。
  2. 创建一个新项目,只要输入项目名称,就会弹出另一个窗口,上面写着:“创建module-info.java”。我只是点击了“不创建”。
  3. 创建一个包。我们称这个包为mywork
  4. myWork包内创建一个Java类。我们称这个类为HelloWorld
  5. 正常运行该文件,一切工作正常。

注意:首先确保使用CMD命令正常运行Java,这样你就可以了解问题不是出在JDK上而是出在eclipse上。


2

我通过进入“属性” -> “Java Build Path”并重新排列我的源文件夹,使其位于JRE系统库之上来解决了这个问题。


尝试了同样的事情,但它并没有解决错误。 - Bhaumik Bhatt

0

我在Eclipse中也遇到了这个问题,但在命令行上一切都正常运行,但在Eclipse中运行时仍然出现“找不到模块”的错误。当我在Java编译器下找到“使用'release'选项”并确保它被勾选后,应用程序在Eclipse中运行良好。这是使用J17和Eclipse 2022。

enter image description here


0

我在将bin文件夹添加到.gitignore后遇到了同样的问题,不确定是否导致了这个问题。

我通过进入项目/属性/构建路径并删除scr文件夹,然后再次添加它来解决了这个问题。


0
这个问题发生在我删除我的bin文件夹以将其从git历史记录中移除后。为了解决它,在Eclipse中:
  1. 删除项目(从Eclipse中删除,而不是从磁盘中删除)
  2. 重新导入它。

0

检查一下你的项目是否是在JDK 9或更高版本中构建的,因为Eclipse在模块方面存在一些问题。将其更改为JDK 9,然后它就可以正常运行了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接