Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass Properties to jar from Powershell?

I've been using Powershell-1.0 for command line needs for a while, instead of cmd.exe. Unfortunately, there are still some caveats when using Java. I need to pass a property to a jar, like that:

java -jar -Duser.language=en any.jar

This line works fine in cmd.exe, but not in Powershell as it searches for another jar:

Unable to access jarfile user.language=en

Using quotes doesn't help.

Is it doable in Powershell-1.0, or do I miss something in Java?

like image 761
jgran Avatar asked Oct 05 '09 07:10

jgran


3 Answers

Take a look at my answer to this question. Note how you can use echoargs.exe to diagnose these sort of problems. Most likely the fix would be to quote the parameter e.g.:

java -jar "-Duser.language=en" any.jar

You can test that using echoargs (from PowerShell Community Extensions):

echoargs -jar "-Duser.language=en" any.jar
Arg 0 is <-jar>
Arg 1 is <-Duser.language=en>
Arg 2 is <any.jar>
like image 181
Keith Hill Avatar answered Oct 03 '22 14:10

Keith Hill


Using quotes works fine for me in PowerShell on Windows 7.

java "-Dmy.property=value" -jar myjar.jar

Be careful: the jar name must be placed right after -jar, and arguments placed after -jar myjar.jar will be passed to the program inside the jarFile.

like image 43
mmuller Avatar answered Oct 03 '22 14:10

mmuller


Try launching instead using the following pattern:

java -Duser.language=en -jar any.jar

That assumes that user.language is meant as a system property. If you meant it as a command line argument, change that to:

java -jar any.jar -Duser.language=en

I am actually surprised that the command line you mentioned works at all outside of powershell (though I have confirmed that it works fine for me too, even on Linux) and it is also a little strange that things would work differently inside and outside of powershell.

From java -help:

Usage: java [-options] class [args...]                 
           (to execute a class)                        
   or  java [-options] -jar jarfile [args...]          
           (to execute a jar file)                     
where options include:
...
    -D<name>=<value>
                  set a system property
...

So basically you should always put the JAR filename directly after the -jar command line option, and any JVM options (such as setting system properties with -D) before.

like image 39
Adam Batkin Avatar answered Oct 03 '22 13:10

Adam Batkin