Re: [问题] command Line 打包jar档与执行

楼主: JGC18 (JGC)   2014-12-11 12:09:25
谢谢darkk6的解答
当我把 Lib资料夹打包起来的jar档就可以直接执行
但我做了另一个测试,我想做另一个UseJar的class去使用TestJar的function
所以我把test.jar放到
D:\java\workspace\testProject\Lib\show\test.jar
[UseJar.java]
D:\java\workspace\testProject\UseJar.java
/*=============================================*/
import Lib.show.TestJar;
class UseJar{
public static void main(String[] args) {
TestJar objHiJava = new TestJar();
objHiJava.hiJava("UseJar");
}
}
/*==============================================*/
[编译指令]
D:\java\workspace\testProject>
javac -cp D:\java\workspace\testProject\Lib\show\test.jar UseJar.java
产生UseJar.class
[执行指令]
D:\java\workspace\testProject>
Case1)
java UseJar
出现错误
Exception in thread "main" java.lang.NoClassDefFoundError: Lib/show/TestJar
at UseJar.main(UseJar.java:4)
Caused by: java.lang.ClassNotFoundException: Lib.show.TestJar
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 1 more
我想应该是没有指定classpath,所以我试了另一个方法
Case2)
java -cp D:\java\workspace\testProject\Lib\show\test.jar UseJar
出现错误(错误: 找不到或无法加载主要类别 UseJar)
还是不行,但不知道为什么这样指定jar档不行,又找了资料,试了第三种方法
Case3)
java -cp .;Lib\show\test.jar UseJar
居然可以执行正确结果
我不懂我已经指定绝对路径的Jar档(case2),为何不行
case3多了一个'.'当前目录的指定,就可以执行
环境变量的CLASSPATH=".;D:\java\workspace\testProject\"
误打误撞虽然结果正确,但却不知所以然
麻烦各位纠正我错误的观念,谢谢
作者: kogrs (kogrs)   2014-12-11 13:06:00
都是classpath 的问题 . case1:漏了所有的classpathcase 2: 漏了 UseJar 这个class 的classpathcase3: classpath OK!case 3 的那个 "." 就是 UseJar 这个class 的classpath
楼主: JGC18 (JGC)   2014-12-11 17:39:00
原来如此,我懂了,非常感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com