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

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


当前回答

如果使用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>

其他回答

如果使用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>

另一个让我挠头的场景是:

package com.me
Public class Awesome extends AwesomeLibObject {
    ....
    public static void main(String[] argv) {
         System.out.println("YESS0");
    }
}

其中AwesomeLibObject是在外部库中定义的类。我收到了同样令人困惑的错误消息:

错误:无法找到或加载主类com。太棒了

解决方法很简单:外部库也必须位于类路径中!

如果类在包中,则必须cd到项目的根目录,并使用类的完全限定名称(packageName.MainClassName)运行。

例子:

我的课程在这里:

D:\project\com\cse\

我的主类的完全限定名称是:

com.cse.Main

所以我回到根项目目录:

D:\project

然后发出java命令:

java com.cse.Main

这个答案是为了帮助新手Java程序员摆脱一个常见错误带来的挫折。我建议您阅读公认的答案,以获得有关Java类路径的更深入的知识。

在Windows上放置。;在开头的CLASSPATH值处。

这个(dot)表示“查看当前目录”。这是一个永久的解决方案。

此外,您还可以通过设置CLASSPATH=%CLASSPATH%;将其设置为“一次”;。。这将在cmd窗口打开时持续。

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

运行时,用户可能无法访问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仍然会发生错误。