Sne*_*ney 2 java jar classpath
MyClassWithMainMethod.java使用someJar.jar的类.
如果我打电话:
java -cp someJar.jar MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)
我得到了例外:
Exception in thread "main" java.lang.NoClassDefFoundError: MyClassWithMainMethod
Caused by: java.lang.ClassNotFoundException: MyClassWithMainMethod
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
Run Code Online (Sandbox Code Playgroud)
但是当我手动将CLASSPATH设置为我的jar时
export CLASSPATH=:/path/to/someJar.jar
Run Code Online (Sandbox Code Playgroud)
它的工作原理
java MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
关于什么
java -cp /path/to/someJar.jar MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)
如果你没有给Java提供jar文件的完整路径,你怎么期望它会找到它?
好吧,你给"-cp"的参数与你使用CLASSPATH变量的事情是一样的 - 当你这样做时会发生什么:
java -cp .:someJar.jar MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)