141 votes

Utilisation appropriée des paramètres de ligne de commande Java -D

Lorsque vous passez un paramètre -D en Java, quelle est la bonne façon d'écrire la ligne de commande et d'y accéder à partir du code?

Par exemple, j'ai essayé d'écrire quelque chose comme ça ...

 if (System.getProperty("test").equalsIgnoreCase("true"))
{
   //Do something
}
 

Et puis l'appelant comme ça ...

 java -jar myApplication.jar -Dtest="true"
 

Mais je reçois une NullPointerException. Qu'est-ce que je fais mal?

232voto

Jon Skeet Points 692016

Je soupçonne que le problème, c'est que vous avez mis le "-D" après l' -jar. Essayez ceci:

java -Dtest="true" -jar myApplication.jar

De l'aide en ligne de commande:

java [-options] -jar jarfile [args...]

En d'autres termes, la façon dont vous l'avez au moment où se traitent -Dtest="true" comme l'un des arguments à passer à l' main plutôt que comme un argument JVM.

(Vous devriez vous aussi déposer les guillemets, mais il peut très bien le travail de toute façon probablement dépend de votre coquille).

42voto

Alain Pannetier Points 4488

Ça devrait être

 java -Dtest="true" -jar myApplication.jar
 

Alors

 System.getProperty("test")
 

renvoie null => NPE

La méthode principale de votre jar reçoit 2 arguments: "-jar" et "myApplication.jar".

Vous devriez vous prémunir contre les NPE.

22voto

maaartinus Points 12510

Vous donnez des paramètres à votre programme à la place de Java. Utilisation

 java -jar -Dtest="true" myApplication.jar 
 

au lieu.

Pensez à utiliser

 "true".equalsIgnoreCase(System.getProperty("test"))
 

éviter le NPE. Mais ne l'utilisez pas toujours sans y penser, parfois lancer le NPE est le bon comportement et parfois quelque chose comme

 System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
 

a raison (en fournissant true par défaut).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X