为什么user.dir可以设置为“。”?

时间:2012-05-03 16:23:22

标签: java unix ant

如果以下命令将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环境变量的值有误。但是什么环境变量?

3 个答案:

答案 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命令进行更改。

如果仍然无效,请告诉我。