问题:
运行程序: java hello/HelloWorld
出现错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/LocalTime
at hello.HelloWorld.main(HelloWorld.java:7)
Caused by: java.lang.ClassNotFoundException: org.joda.time.LocalTime
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
原因:
没有引入org.joda.time.LocalTime 所在的jar包(joda-time-2.9.2.jar)
解决:
- 在***/target/classes 目录运行如下命令
java -cp ./joda-time-2.9.2.jar:. hello/HelloWorld
或者
java -cp joda-time-2.9.2.jar: hello.HelloWorld
(因为joda-time-2.9.2.jar 在当前目录,并且和顶级包名在同一级目录,所以 ./ 和 . 可以省略)
注意:
./ 为joda-time-2.9.2.jar 文件所在路径
. 为顶级包名所在路径(参考:https://blog.youkuaiyun.com/abcdu1/article/details/86693800)
- 在 ***/target/classes/hello 目录运行命令为
java -cp ../joda-time-2.9.2.jar:.. hello/HelloWorld
或者
java -cp ../joda-time-2.9.2.jar:.. hello.HelloWorld
附录:
HelloWorld.java :(注意 package 名)
package hello;
public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}
Greeter.java
package hello;
public class Greeter {
public String sayHello() {
return "Hello world!";
}
}
参考:
https://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean