wake-up-neo.net

Festlegen mehrerer Systemeigenschaften Java Befehlszeile

Gibt es eine einfachere Möglichkeit, mehrere Systemeigenschaften in der Befehlszeile für ein Java) - Programm anzugeben, als mehrere -D-Anweisungen zu haben?

Versuchen Sie dies zu vermeiden:

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

Ich dachte, ich hätte ein Beispiel von jemandem gesehen, der einen -D Und einen danach zitierten String verwendet, aber ich kann das Beispiel nicht wiederfinden.

59
Tyler DeWitt

Antwort ist NEIN. Sie haben vielleicht ein Beispiel gesehen, in dem jemand so etwas eingestellt hätte:

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

Dann würde die Anwendung den Wert der Eigenschaftszeichenfolge Arguments analysieren, um einzelne Werte abzurufen. In Ihrem main erhalten Sie die Schlüsselwerte als (vorausgesetzt, das Eingabeformat ist garantiert):

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]);
    }
}

Auch der -D sollte vor der Hauptklasse oder der jar -Datei in der Java -Befehlszeile stehen. Beispiel: Java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

50
ring bearer

Anstatt die Eigenschaften als Argument zu übergeben, können Sie Eigenschaften zum Speichern verwenden.

15
Dimitri

In der Dokumentation steht nichts darüber.

Hier ist ein Zitat:

-Dproperty = value Setzt einen Systemeigenschaftswert. Wenn value eine Zeichenfolge ist, die Leerzeichen enthält, müssen Sie die Zeichenfolge in doppelte Anführungszeichen setzen:

Java -Dfoo = "some string" SomeClass

14
adarshr

Möglicherweise können Sie die Umgebungsvariable Java_TOOL_OPTIONS Verwenden, um Optionen festzulegen. Bei Rasbian hat es funktioniert. Siehe mgebungsvariablen und Systemeigenschaften mit folgendem Wortlaut:

In vielen Umgebungen ist die Befehlszeile nicht leicht zugänglich, um die Anwendung mit den erforderlichen Befehlszeilenoptionen zu starten.

Dies tritt häufig bei Anwendungen auf, die eingebettete VMs verwenden (dh, sie verwenden die JNI-Aufruf-API (Java Native Interface)), um die VM zu starten), oder bei denen der Start stark in Skripts verschachtelt ist Die Umgebungsvariable Java_TOOL_OPTIONS kann nützlich sein, um eine Befehlszeile zu erweitern.

Wenn diese Umgebungsvariable festgelegt ist, fügt die Funktion JNI_CreateJavaVM (in der JNI-Aufruf-API) den Wert der Umgebungsvariablen zu den in ihrem JavaVMInitArgs-Argument angegebenen Optionen hinzu.

Diese Verwendung von Umgebungsvariablen kann jedoch aus Sicherheitsgründen deaktiviert werden.

In einigen Fällen ist diese Option aus Sicherheitsgründen deaktiviert. Unter Oracle Solaris ist diese Option beispielsweise deaktiviert, wenn sich die effektive Benutzer- oder Gruppen-ID von der tatsächlichen ID unterscheidet.

In diesem Beispiel wird der Unterschied zwischen der Angabe in der Befehlszeile und der Verwendung der Umgebungsvariablen Java_TOOL_OPTIONS Gezeigt.

screenshot showing use of Java_TOOL_OPTIONS environment variable

4

Wenn die erforderlichen Eigenschaften im System festgelegt werden müssen, gibt es keine Option als -D. Wenn Sie diese Eigenschaften jedoch beim Booten einer Anwendung benötigen, empfiehlt es sich, die Eigenschaften über die Eigenschaftendateien zu laden. Es ist nicht erforderlich, den Build für eine einzelne Eigenschaft zu ändern.

1
SUKHDEV PATIL