新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
新Java开发人员遇到的一个常见问题是,他们的程序无法运行,并显示错误消息:无法找到或加载主类。。。
这意味着什么,是什么导致的,你应该如何解决?
当前回答
在Windows PowerShell中使用-cp选项运行java时,可能会出现如下错误:
The term `ClassName` is not recognized as the name of a cmdlet, function, script ...
为了让PowerShell接受命令,-cp选项的参数必须包含在引号中,如下所示:
java -cp 'someDependency.jar;.' ClassName
以这种方式形成命令应该允许Java正确处理类路径参数。
其他回答
当相同的代码在一台电脑上运行,但在另一台电脑中显示错误时,我找到的最佳解决方案是如下编译:
javac HelloWorld.java
java -cp . HelloWorld
这是一个具体的案例:
Windows(通过Windows7测试)不接受类和包名称中的特殊字符(如á)。不过,Linux确实如此。
我在NetBeans中构建.jar并尝试在命令行中运行时发现了这一点。它在NetBeans中运行,但不在命令行上运行。
好吧,已经有很多答案了,但没有人提到文件权限可能是罪魁祸首。
运行时,用户可能无法访问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仍然会发生错误。
在测试JavaMongoDB JDBC连接时,我也遇到了类似的错误。我认为简单总结一下我的最终解决方案是很好的,这样将来任何人都可以直接研究这两个命令,并可以继续进行下去。
假设您位于Java文件和外部依赖项(JAR文件)所在的目录中。
编译:
javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
-cp-类路径参数;逐个传递所有从属JAR文件*.java-这是具有main方法的java类文件。标准差分法
Run:
java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
请在所有依赖JAR文件结束后观察冒号(Unix)/逗号(Windows)最后,观察没有任何扩展名的主类名(没有.class或.java)
我在做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" />