平时开发时都是使用IDE运行java程序,但是当程序打包部署到服务器后,需要从命令行来启动,通过java 类名或java -jar jarfile命令来运行,初学者经常会遇到找不到或无法加载主类的错误。下面是一个例子。
在helloapp/com/hello目录下创建一个HelloWorld.java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
进入hello目录,通过javac HelloWorld.java编译生成HelloWorld.class,再通过java HelloWorld执行,能正常输出结果。
现在在类前面加上包名:
package com.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
重新编译之后再执行就会报错:
d:\test\helloapp\com\hello>java HelloWorld
错误: 找不到或无法加载主类 HelloWorld
java命令运行一个类,需要指定类的全限定名,即完整的包名+类名,使用全限定名之后依然报错:
d:\test\helloapp\com\hello>java com.hello.HelloWorld
错误: 找不到或无法加载主类 com.hello.HelloWorld
这是因为java命令执行时默认以当前路径为类搜索路径(类路径),它搜索当前目录下com\hello\HelloWorld.class文件,完整路径就是d:\test\helloapp\com\hello\com\hello\HelloWorld.class,当然找不到这个文件。
解决办法是使用-cp选项指定类路径,告诉jvm应该从helloapp目录开始搜索类:
d:\test\helloapp\com\hello>java -cp d:\test\helloapp com.hello.HelloWorld
Hello World
或者不指定类路径,在包名的上一层目录(helloapp)中执行:
D:\test\helloapp>java com.hello.HelloWorld
Hello World
参考:
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/toc.html
版权声明:本文为u012254277原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。