Wenn ich ein System festlegen Eigenschaft mehrmals beim aufrufen der JVM, welcher Wert verwendet wird?
Wenn ich ein system festlegen Eigenschaft mehrmals beim Aufruf der JVM, welcher Wert wird ich eigentlich bekommen wenn ich wieder an der Anlage? z.B.
java -Dprop=A -Dprop=B -jar my.jar
Was wird die Folge sein, wenn ich rufe System.getProperty("prop");
?
Den Java-Dokumentation auf dieser nicht wirklich sagen Sie mir alles, was nützlich, an dieser front.
In meinen nicht-wissenschaftlichen Tests auf ein paar Computern, die verschiedene JVMs, wie es scheint, der Letzte Wert ist der zurück (was ist eigentlich das Verhalten, die ich brauche) aber ich fragte mich, ob dieses Verhalten tatsächlich definiert ist offiziell überall oder kann es variieren zwischen JVMs?
- IMHO ist die Angabe dieses wäre ein bisschen wie eine Warnung über nicht indem Sie Ihre Katze in der Mikrowelle. warum würden Sie geben die gleichen system-Eigenschaft zweimal, außer wenn Sie wirklich, wie Sie Probleme?
- In diesem Fall gibt es einige shell-Skripte, Aufruf der JVM mit einigen Standard-Einstellungen, aber die Benutzer sollten in der Lage sein, um anzugeben, system-Eigenschaften, die durch die übergebene Skript, um die JVM.
- Ah, OK. Fair genug. Ich glaube nicht, dass über diesen Fall.
- Ich bin jetzt verzweifelt versucht zu denken, der einen use-case für die Umsetzung eine Katze in eine Mikrowelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java.util.System-Klasse ist gesichert durch eine Properties-Klasse ist eine Erweiterung von Hashtable. Vorausgesetzt, die Werte werden ausgelesen, um bei der übergabe als Argumente an die JVM, dann wird der Letzte Wert zugewiesen werden, der den endgültigen Wert.
Es gibt nichts wie das schreiben ein wenig Klasse zu sehen, wie es funktioniert.
Welche, wenn Sie kompiliert und lief mit der Befehlszeile
yeilds die Ausgabe
Das würde bedeuten, dass die Werte in der Tabelle von Links nach rechts, mit dem letzten Wert überschreiben die vorherigen Werte.
Nur um die Umwelt, Fedora 16, Linux 3.3.7, 64-bit -
(print 52 :radix 10 :radix 8)
die standard gibt, dass 'Wenn mehr als ein solches argument-paar matches, die am weitesten Links stehende argument-paar ist."program ${EXTRA_OPTIONS} -o default-o -f default-f
. Wenn ganz Links Optionen überschreiben die auf der rechten Seite, dann, dass der code ermöglicht Benutzern das überschreiben von Standardeinstellungen definieren EXTRA_OPTIONS. Dies scheint wie eine ziemlich vernünftige Sache für die spec-Schreiber zu machen, gut definiert.java -Dheap=A -Dheap=B -Dheap=C
angegeben ist und ob heap würde eindeutig einen (einzigen) Wert. Soweit ich sehen kann, ist es nicht angegeben. Es wäre nicht schwierig gewesen, für die spec-Schreiber zu sagen: "die äußerste Rechte Einstellung wird verwendet", aber es scheint nicht, dass Sie es Taten.Ich bin mir nicht sicher, ob es etwas gibt, dokumentiert Oracle.
Laut IBM JRE Dokumente:
Die Reihenfolge der Java-Optionen in der Befehlszeile definiert, welche Optionen haben Vorrang während des Startvorgangs. Ganz rechts Optionen haben Vorrang vor Optionen ganz Links.