java为什么是用户。dir可以设置为“.”?
在UNIX环境中,如果下面的命令显示该用户,可能会出现什么错误。目录设置为“.”
/home/user> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : .
如果我在不同的计算机上运行此命令-用户。目录设置为当前目录:
/home/user2> $ANT_DIR/bin/ant -diagnostics | grep dir
user.dir : /home/user2
Java也不起作用
/home/user> java -cp .:$CLASSPATH test
Exception in thread "main" java.lang.NoClassDefFoundError: test
Caused by: java.lang.ClassNotFoundException: test
at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
at java.lang.ClassLoader.loadClass(ClassLoader.java:653)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
Could not find the main class: test. Program will exit.
将当前目录添加到类路径
/home/user> java -cp /home/user:$CLASSPATH test
Hello World!
如您所见,java只有在添加当前目录时才找到测试类,而不是“.”,到类路径
据我所知,某些unix环境变量的值是错误的。但是什么样的环境变量呢
# 1 楼答案
以防万一:名为“user.dir”的系统属性应该指向当前工作目录,而不是用户主目录(请参见http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)。如果您想要用户主目录,请使用名为“user.home”的属性
我的java测试程序:
始终为我提供当前目录的绝对路径。我刚刚安装了ant(apache-ant-1.8.4),这里的输出也是一条绝对路径
保存当前工作目录的唯一环境变量是PWD,但即使像这样修改PWD
PWD=. ant -diagnostics | grep dir
也不会改变什么,它仍然打印user.dir : /home/holger/Programming
。所以这一定是环境以外的原因我的下一个猜测是权限:目录/home/user可能是NFS挂载,而运行ant的用户(一些放错位置的suid位?)没有访问此目录的权限。要测试这一点:做一个
cd /tmp
并再次运行ant -diagnostics
# 2 楼答案
怎么了?你想知道用户目录的绝对位置吗
如果是这样,那就去做吧