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.
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
Au lieu de passer les propriétés en argument, vous pouvez utiliser un.propriétés pour les stocker.
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
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
.
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é.