4

次のコマンドで 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 環境変数の値が間違っています。しかし、どの環境変数ですか?

4

3 に答える 3

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をPWD=. ant -diagnostics | grep dir変更しても、変更はなく、出力されuser.dir : /home/holger/Programmingます。したがって、これは環境以外のものでなければなりません。

私の次の推測はパーミッションです。ディレクトリ/home/ userはおそらくNFSマウントであり、antを実行しているユーザー(suid-bitの置き忘れ?)にはこのディレクトリにアクセスするパーミッションがありません。これをテストするには:cd /tmpを実行して、もう一度実行しますant -diagnostics

于 2012-12-02T20:39:19.340 に答える
0

それの何がいけないの?ユーザーディレクトリの絶対位置が必要ですか?

もしそうなら、ただする

new File(System.getProperty("user.dir")).getAbsolutePath()
于 2012-05-08T20:30:32.743 に答える
-1

ホームディレクトリは /etc/passwd ファイルに設定されています。

parv1616@parv:~$ 猫 /etc/passwd | grep parv1616

parv1616:x:1000:1000:Parvinder Singh,,,: /home/parv1616 :/bin/bash

必要なディレクトリに変更するだけです。

usermod コマンドでも変更できます。

それでもうまくいかない場合は、お知らせください。

于 2013-05-02T08:57:46.413 に答える