Définir plusieurs propriétés système Java ligne de commande

Existe-t-il un moyen plus facile de spécifier plusieurs propriétés système sur la ligne de commande à un programme Java plutôt que d'avoir plusieurs instructions-D?

Essayer d'éviter cela:

 java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar

Je pensais avoir vu un exemple de quelqu'un en utilisant un -D et une chaîne Citée après cela, mais je ne peux pas trouver l'exemple à nouveau.

52
demandé sur Captain Man 2011-09-08 20:39:10

5 réponses

La réponse est non. Vous avez peut-être vu un exemple où quelqu'un aurait défini quelque chose comme:

-DArguments=a=1,b=2,c=3,d=4,e=cow

Ensuite, l'application analyserait la valeur de la chaîne de propriété Arguments pour obtenir des valeurs individuelles. Dans votre main, vous pouvez obtenir les valeurs clés comme (en supposant que le format d'entrée est garanti):

String line = System.getProperty("Arguments");
if(line != null) {
  String str[] = line.split(",");
    for(int i=1;i<str.length;i++){
        String arr[] = str[i].split("=");
        System.out.println("Key = " + arr[0]);
        System.out.println("Value = " +  arr[1]);
    }
}

En outre, le {[4] } doit être avant la classe principale ou le fichier jar dans la ligne de commande java. Exemple : java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

41
répondu ring bearer 2016-11-08 18:51:17

Au lieu de passer les propriétés en argument, vous pouvez utiliser un.propriétés pour les stocker.

14
répondu Dimitri 2011-09-08 17:06:25

Il N'y a rien sur la Documentation qui mentionne quelque chose comme ça.

Voici une citation:

- Dproperty = valeur Définissez une valeur de propriété système. Si value est une chaîne qui contient des espaces, vous devez entourer la chaîne de guillemets:

Java-Dfoo = "une chaîne" SomeClass

12
répondu adarshr 2011-09-08 16:48:39

Vous pouvez utiliser la variable d'environnement JAVA_TOOL_OPTIONS pour définir des options. Ça a marché pour moi avec Rasbian. Voir Variables D'environnement et Propriétés système qui a ceci à dire:

Dans de nombreux environnements, la ligne de commande n'est pas démarrez l'application avec les options de ligne de commande nécessaires.

Cela se produit souvent avec des applications qui utilisent des machines virtuelles intégrées (ce qui signifie ils utilisent L'API D'Invocation Java Native Interface (JNI) pour démarrer VM), ou lorsque le démarrage est profondément imbriqué dans des scripts. Dans ces environnements la variable D'environnement JAVA_TOOL_OPTIONS peut être utile pour augmenter une ligne de commande.

Lorsque cette variable d'environnement est définie, la fonction JNI_CreateJavaVM (dans L'API D'Invocation JNI), la fonction JNI_CreateJavaVM ajoute valeur de la variable d'environnement aux options fournies dans son Argument JavaVMInitArgs.

Toutefois, cette utilisation de la variable d'environnement peut être désactivée pour des raisons de sécurité raisons.

Dans certains cas, cette option est désactivée pour des raisons de sécurité. Pour exemple, sur le système d'exploitation Oracle Solaris, cette option est désactivé lorsque l'ID d'utilisateur ou de groupe effectif diffère de l'ID réel.

Voir cet exemple montrant la différence entre spécifier sur la ligne de commande et utiliser la variable d'environnement JAVA_TOOL_OPTIONS.

capture d'écran montrant l'utilisation de la variable D'environnement JAVA_TOOL_OPTIONS

2
répondu Richard Chambers 2018-01-13 05:27:25

Si les propriétés requises doivent être définies dans system, il n'y a pas d'option que-D Mais si vous avez besoin de ces propriétés lors du démarrage d'une application, le chargement des propriétés via les fichiers proerties est une meilleure option. Il ne sera pas nécessaire de changer la construction pour une seule propriété.

1
répondu SUKHDEV PATIL 2016-08-19 09:55:24