2009-10-05 9 views
10

J'ai utilisé Powershell-1.0 pour les besoins de la ligne de commande pendant un certain temps, au lieu de cmd.exe. Malheureusement, il existe encore quelques mises en garde lors de l'utilisation de Java. Je dois passer une propriété à un pot, comme ça:Comment passer Propriétés à pot de Powershell?

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

Cette ligne fonctionne très bien dans cmd.exe, mais pas dans Powershell comme il recherche un autre pot: Impossible d'accéder jarfile user.language = en

L'utilisation de guillemets n'aide pas.

Est-ce faisable dans Powershell-1.0, ou est-ce que quelque chose me manque dans java?

Merci à l'avance,

Cordialement,

jgran

+0

il est bon que vous l'essayiez dans cmd.exe, je faisais juste 'dépanner' mes problèmes ailleurs quand la commande ci-dessous s'est produite à moi le chemin de classe n'est pas disponible. Qui pourrait penser que la powershell était la cause. 'java -Djasypt.encryptor.password = pass -jar mon.jar' –

Répondre

2

Essayez de lancer au lieu d'utiliser le modèle suivant:

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

Cela suppose que user.language est conçu comme une propriété système . Si vous vouliez dire comme un argument de ligne de commande, changer cela à:

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

Je suis vraiment surpris que la ligne de commande que vous avez mentionné les travaux du tout en dehors de Powershell (bien que je l'ai confirmé que cela fonctionne bien pour moi aussi, même sur Linux) et il est aussi un peu étrange que les choses fonctionnent différemment à l'intérieur et à l'extérieur de PowerShell.

De 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 
... 

Donc, fondamentalement, vous devriez toujours mettre le nom de fichier JAR directement après l'option de ligne de commande -jar, et toutes les options de JVM (telles que la définition des propriétés du système avec -D) avant.

+0

PowerShell fait quelque chose de bizarre aux -D-options passées à java, donc ça ne marchera pas. Voir la réponse de Keith Hill. –

+0

@Johannes Powershell mangling dément de la ligne de commande de côté, ma réponse est toujours, que le nom JAR doit * toujours * être directement après le '-jar' sur la ligne de commande (ce qui n'est pas le cas dans la question d'origine) –

17

Jetez un oeil à ma réponse à cette question. Notez comment vous pouvez utiliser echoargs.exe pour diagnostiquer ce genre de problèmes. Très probablement le correctif serait de citer le paramètre par exemple:

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

Vous pouvez tester que l'utilisation echoargs (de 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> 
5

Utiliser les guillemets fonctionne bien pour moi dans PowerShell sous Windows 7.

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

attention: doit être placé le nom du pot juste après -jar et arguments placés après -jar myjar.jar sera transmis au programme à l'intérieur le jarFile.

Questions connexes