新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。

这意味着什么,是什么导致的,你应该如何解决?


当前回答

如果是Maven项目:

转到POM文件。删除所有依赖项。保存POM文件。再次只导入必要的依赖项。保存POM文件。

这个问题应该消失。

其他回答

修复它的最简单方法是在这里重新下载Maven Apache:https://maven.apache.org/download.cgi

然后再次设置路径:

系统变量

将您设置Apache Maven文件夹的路径设置为:C:\Program Files\Apache-Maven-3.8.4\bin

重新启动终端或IDE,它应该可以工作。

它总是对我有用。

如果使用IntelliJ并在从IDE运行main方法时出错,只需确保类位于java包中,而不是kotlin中

如果使用Maven构建JAR文件,请确保在pom.xml文件中指定主类:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

这件事也发生在我身上。在我的例子中,只有在源代码中存在HttpServlet类时才会发生这种情况(IntelliJ IDEA没有给出编译时错误;servlet包导入得很好,但是在运行时出现了这个主类错误)。

我设法解决了。我进入菜单“文件”→ 项目结构…:

然后到模块:

servlet模块附近有一个提供的作用域。我将其更改为编译:

而且成功了!

好吧,已经有很多答案了,但没有人提到文件权限可能是罪魁祸首。

运行时,用户可能无法访问JAR文件或路径的某个目录。例如,考虑:

/dir1/dir2/dir3/myjar.Jar中的Jar文件

拥有JAR文件的用户1可以执行以下操作:

# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar

但它仍然不起作用:

# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram

这是因为正在运行的用户(User2)无权访问dir1、dir2或javalibs或dir3。当User1可以看到文件并可以访问这些文件时,这可能会让某人发疯,但User2仍然会发生错误。