该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package qmy.test;
public class C1
{
public void write()
{
System.out.println("C1.write()");
}
}
以上是C1.java文件
import qmy.test.*;
public class C2
{
public static void main(String[] args)
{
C1 c1 = new C1();
c1.write();
}
}
以上是C2.java文件
先用javac -d . C1.java编译C1.java,生成带文件夹的qmy.test.C1.class
然后用jar cvf abc.jar qmy\test\* 把C1.class连同文件夹打成一个jar包
这时候把qmy文件夹和C1.java删除
最后的目录结构是这样的
..
¦__C2.java
¦__abc.jar
abc.jar的内部目录结构是这样的
..
¦__META-INF
¦ ¦__MANIFEST.MF
¦__qmy
¦ ¦__test
¦ ¦__C1.class
这时再用javac C2.java编译C2.java
这时候报错,说软件包qmy.test不存在。为什么?
我环境变量classpath的值是 .;%java_home%\lib
按理说javac和java应该可以找到当前路径的呀(环境变量里有个.; 这个.代表的是当前路径吧)。(问题1)
后来我执行了set classpath=abc.jar,再javac C2.java,顺利通过。
但是执行java C2的时候报错,Exception in thread "main" java.lang.NoClassDefFoundError: C2。(问题2)
我再改了系统环境变量的classpath为: .;%java_home%\lib;abc.jar所在文件夹(是文件夹,而不是指定jar文件)
还是不行,编译都通不过。(问题3)
最后我干脆把系统环境变量的classpath改为:.;%java_home%\lib;xxxx\abc.jar
这回可以了,编译正常,运行正常。就是不明白为什么非得这么设置。如果非得这么设置,那eclipse,JBuilder那些IDE又是怎么实现的?它们没有改系统的全局环境变量吧?(问题4)