如果以下命令将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.
将当前目录添加到classpath。
/home/user> java -cp /home/user:$CLASSPATH test
Hello World!
正如您所看到的,只有当我将当前目录而不是“。”添加到classpath时,java才找到测试类。
据我所知,一些unix环境变量的值有误。但是什么环境变量?
答案 0 :(得分:1)
以防万一:名为“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=. ant -diagnostics | grep dir
修改PWD也不会改变,它仍会打印user.dir : /home/holger/Programming
。所以这必须是环境以外的东西。
我的下一个猜测是权限:目录/ home / user可能是NFS挂载,运行ant的用户(一些错位的suid-bit?)没有访问该目录的权限。要对此进行测试:执行cd /tmp
并再次运行ant -diagnostics
。
答案 1 :(得分:0)
这有什么问题?你想要用户dir的绝对位置吗?
如果只是这样做
new File(System.getProperty("user.dir")).getAbsolutePath()
答案 2 :(得分:-1)
主目录在/ etc / passwd文件中设置。
parv1616 @ parv:〜$ cat / etc / passwd | grep parv1616
parv1616:x:1000:1000:Parvinder Singh ,,,: / home / parv1616 :/ bin / bash
您只需要使用您希望的目录进行更改。
也可以使用usermod命令进行更改。
如果仍然无效,请告诉我。