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

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


当前回答

在IntelliJ IDEA中,检查您的全局库*和本地库检查库版本文件pom.xml,可能是旧库前面的答案中提到了很多可能性,也需要尝试

其他回答

排除以下文件解决了问题。

META-INF/*.SF

META-INF/*.DSA

META-INF/*.RSA

在build.gradle中添加了以下代码

jar {
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
    {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
    manifest {
        attributes(
                'Main-Class': 'mainclass'
        )
    }
}

这里的所有答案似乎都针对Windows用户。对于Mac,类路径分隔符是:,而不是;。作为一个错误,使用;如果从Windows到Mac,则很难发现。

下面是相应的Mac命令:

java -classpath ".:./lib/*" com.test.MyClass

在本例中,包是com.test,类路径中还包含一个lib文件夹。

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

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

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

场景:使用命令提示符(Windows中的CMD)编译并运行一个简单的“java”程序,该程序只有“Main.java”文件,并指定了“packagemain”。

源文件路径:

某些项目名称文件夹\src\main\main.java

目标文件夹:

某些项目名称文件夹\dest

目标文件路径(文件夹'\main'和文件'\main.class'将由'javac'生成):

某些项目名称文件夹\dest\main\main.class

Main.java如下:

package main;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

编制:

// 'javac' compiler will produce 'Main.class' in the 'dest\main' folder.
// 'main' folder is created because in the source file(in our case: 'Main.java') is
// specified 'package main'.

javac -d ./dest ./src/main/Main.java

运行编译文件(在本例中为“Main.class”):

// '-cp'(is the same as '-classpath')
// './dest'(means destination folder, where resides compiled 'Main.class').
// 'main.Main'(means 'package' 'main', which contains class 'Main'('Main.class'))
// WARNING: when run 'java' class, MUST NOT type extension '.class'
//          after 'class name
//          (in our case: 'main.Main'(<package>.<class-name>) WITHOUT extension 
//           '.class').

java -cp ./dest main.Main

// Hello world

有时,在您可能尝试过的一些在线编译器中,如果不编写公共类[Classname],而只编写类[Classname],则会出现此错误。