如果以下命令说user.dir设置为".",在UNIX环境中会有什么问题?
/home/user> $ANT_DIR/bin/ant -diagnostics | grep dir
user.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 环境变量具有错误的值。但是什么环境变量呢?
万一:名为"user.dir"的系统属性应指向当前工作目录,而不是用户主目录(请参阅 http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)。如果要拥有用户主目录,请使用名为"user.home"的属性。
我的Java测试程序:
public class UserDirSystemProperty {
public static void main(final String[] args) {
System.out.println(System.getProperty("user.dir"));
}
}
始终为我提供当前目录的绝对路径。我刚刚安装了ant(apache-ant-1.8.4),输出也是这里的绝对路径。
保存当前工作目录的唯一环境变量是 PWD,但即使像这样修改 PWD PWD=. ant -diagnostics | grep dir
也不会改变事情,它仍然打印user.dir : /home/holger/Programming
。所以这必须是环境以外的其他东西。
我的下一个猜测是权限:目录/home/user 可能是 NFS 挂载,运行 ant 的用户(一些放错位置的 suid-bit?)没有访问此目录的权限。要对此进行测试:执行cd /tmp
并再次运行ant -diagnostics
。
这有什么问题?你想要用户目录的绝对位置吗?
如果是这样,就去做
new File(System.getProperty("user.dir")).getAbsolutePath()
主目录设置在/etc/passwd 文件中。
parv1616@parv:~$ cat/etc/passwd | grep parv1616
parv1616:x:1000:1000:Parvinder Singh,,,:/home/parv1616:/bin/bash
您只需要使用所需的目录更改它。
它也可以用usermod命令进行更改。
如果仍然不起作用,请告诉我。