views:

358

answers:

1

How do I change the user.home system property from outside my java program, so that it thinks it's a different directory from D:\Documents and Settings\%USERNAME%? Via environment variables, or VM arguments?

+5  A: 

Setting VM argument should work:

java -Duser.home=<new_location> <your_program>

Here's a test case:

public class test {
  public static void main(String[] args) {
    System.out.println(System.getProperty("user.home"));
  }
}

Tested with java 1.5.0_17 on Win XP and Linux

java test
/home/ChssPly76

java -Duser.home=overwritten test
overwritten
ChssPly76
Actually, I tried this, and it doesn't seem to work...
weiji
I've tried it too, works just fine - see my update for code sample. What java version have you tried it with?
ChssPly76
It could be a shell escaping issue.
daveb
oh hoh! - I invoked it as "java test -Duser.home=asdf", if I do "java -Duser.home=asdf test" it DOES work. It vaguely reminds me about something to do with the way command-line arguments are processed. Thanks.
weiji
@weiji: yes ... the java command line syntax REQUIRES the vm args to be before the class name. If you put them after the class name, 'java' will assume they are regular arguments for your app, and pass them to the 'main' method as part of the 'args' array.
Stephen C