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

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


当前回答

关于外部库的回答-

编译:

javac -cp ./<external lib jar>: <program-name>.java

执行:

java -cp ./<external lib jar>: <program-name>

上述方案在OS X和Linux系统中运行良好。注意类路径中的:。

其他回答

我以为我不知怎么设置了错误的类路径,但问题是我键入了:

java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool  

而不是:

java -cp C:/java/MyClasses utilities/myapp/Cool   

我认为完全限定的意思是包含完整的路径名而不是完整的包名。

如果是Maven项目:

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

这个问题应该消失。

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

这是另一个花费了我一点时间的问题:命令行类路径参数的行为与您预期的不同。我在MacOS上直接调用CLI,并且在调用中包含两个jar。

例如,这两个都让工具混淆了主类的名称:

这是因为星号导致它错误地解析参数:

java-cp路径/to/jars/*com.mypackage.Main

这是因为我不知道为什么:

java-cp“*.jar”com.mypackage.Main

这是有效的:

java-cp“path/to/jars/*”com.mypackage.Main

显式列出两个jar也有效:

java-cp路径/to/jars/jar1.jar:路径/to/jar/jar2.jar com.mypackage.Main

这是一个具体的案例:

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

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