这是关于在命令行中,使用java -classpath的小实验。
首先,必须在系统环境变量中设置过classpath,如何设置见: http://www.21jn.net/html/72/n-272.html
开始我对编译路径的探讨,
首先,写一个小程序(我这个程序是不带包的,即没有package语句):
import java.io.File;
public class AquariumInSwing {
public static void main(String[] args) {
String myPath = System.getProperty( "java.class.path");
System.out.println(myPath);
myPath = System.getProperty("user.dir");
System.out.println(myPath);
File file = new File(".");
System.out.println(file.getAbsolutePath());
}
}
工程的目录是:D:\JavaWorkspace\Aquarium
.java的源文件在D:\JavaWorkspace\Aquarium\src下,
.class文件由MyEclipse编译后放在D:\JavaWorkspace\Aquarium\bin下,
使用MyEclipse编译,运行,得到的结果是(不包括--------------------------------):
--------------------------------------------------------------------
D:\JavaWorkspace\Aquarium\bin
D:\JavaWorkspace\Aquarium
D:\JavaWorkspace\Aquarium\.
--------------------------------------------------------------------
接下来,我希望在命令行中,执行该程序,看看输出的结果
因为.class文件已经在bin下了,所以,我直接在命令行下去到
(1)D: 转到D盘
(2)cd D:\JavaWorkspace\Aquarium\bin 去到bin下
(3)java AquariumInSwing
得到的结果是:
--------------------------------------------------------------------
.;C:\Program Files\Java\jdk1.6.0_18\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_18\lib\tools.jar
D:\JavaWorkspace\Aquarium\bin
D:\JavaWorkspace\Aquarium\bin\.
--------------------------------------------------------------------
完全不一样嘛~~~~~
怎么会这样???!!!!!!
我的估计是:MyEclipse执行程序时,通过-classpath修改了运行时的classpath,即覆盖了我们之前设置的环境变量classpath。
如果想在命令行中,得到与MyEclipse运行时一样的效果,可以这样:
java -classpath D:\JavaWorkspace\Aquarium\bin AquariumInSwing
结果:
----------------------------------------------------
D:\JavaWorkspace\Aquarium\bin
D:\JavaWorkspace\Aquarium
D:\JavaWorkspace\Aquarium\.
---------------------------------------------------
最后补充一点 文件夹的名字不要有空格,例如不要把JavaWorkspace起名为Java Workspace,
否则,-classpath 参数会不正确。
但是,如果真的有空格,可以使用引号,引住-classpath的参数,即:
java -classpath "D:\JavaWorkspace\Aquarium\bin" AquariumInSwing
最后,大家可以试试这个
java -classpath "%classpath%;D:\JavaWorkspace\Aquarium\bin" AquariumInSwing
其实,-classpath会替代系统环境变量中设置的classpath,如果不想被替代,可以通过%classpath%,然后再追加自己的classpath,记住用分号(;)分割。