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

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


当前回答

在这种情况下,我犯了这样一个错误:

java -cp lib.jar com.mypackage.Main

它与以下各项一起工作:;对于Windows和:对于Unix:

java -cp lib.jar; com.mypackage.Main

其他回答

我在做mvn eclipse后遇到了这个错误:eclipse。这有点搞乱了我的.classpath文件。

我不得不将.classpath中的行从

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

to

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />

根据错误消息(“找不到或加载主类”),有两类问题:

找不到Main类无法加载Main类(在接受的答案中未充分讨论此情况)

当完全限定类名中存在拼写错误或语法错误,或者提供的类路径中不存在Main类时,找不到Main类。

当无法启动类时,无法加载Main类。通常,主类扩展另一个类,而该类不存在于提供的类路径中。

例如:

public class YourMain extends org.apache.camel.spring.Main

如果不包括骆驼弹簧,将报告此错误。

在我的例子中,出现错误是因为我提供了源文件名而不是类名。

我们需要向解释器提供包含main方法的类名。

这是一个具体的案例:

Windows(通过Windows7测试)不接受类和包名称中的特殊字符(如á)。不过,Linux确实如此。

我在NetBeans中构建.jar并尝试在命令行中运行时发现了这一点。它在NetBeans中运行,但不在命令行上运行。

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