2013-11-28 5 views
5

Ich habe viele Orte durchsucht, IPv6 aktiviert zu machen, um eine Dual-Stack-Maschine IPv6 zu haben. Ich habe festgestellt, dass viele antworten, um java.net.preferIPv6Addresses = true zu setzen, das standardmäßig auf false gesetzt ist.wo zu setzen java.net.preferIPv6Addresses = true

Ich möchte wissen, wo genau ich diese Änderungen vornehmen soll, d. H. In welcher Datei oder muss ich Java-Code schreiben, um dies zu tun.

Antwort

7

Die Einstellung muss in die Systemeigenschaften gelangen ... und sie muss da sein, bevor der relevante Teil der Java-Klassenbibliothek initialisiert wird.

Die "bombensichere" Möglichkeit besteht darin, die Einstellung als Befehlszeilenparameter an die JVM zu übergeben. z.B.

java -Djava.net.preferIPv6Addresses=true ... com.example.MainClass <args> 

könnten Sie auch Ihre Anwendung Code, um die Einstellung zu injizieren mit

System.setProperty("java.net.preferIPv6Addresses", "true"); 

aber Sie müssen sicherstellen, dass die Injektion schnell genug geschieht, und das wäre nicht trivial sein.

1 - "Bald genug" bedeutet, dass die statische Initialisierung des JVM-Netzwerkcodes erfolgt ist. Dies kann in einer komplexen Anwendung schwierig zu erreichen sein. Beachten Sie die Network Properties Dokumentation besagt: "Einige werden nur einmal beim Start der VM überprüft, und daher am besten mit der Option -D des Java-Befehls eingestellt werden ...". Beachten Sie, dass NICHT angegeben wird, dass diese Eigenschaften nur auf diese Weise festgelegt werden können.


Der Vorschlag für die Verwendung des JAVA_OPTS Umgebungsvariable wird nur für einige Anwendungen arbeiten. Es hängt davon ab, was das Launcher-/Wrapper-Skript der Anwendung tut. Die Standard-java.exe und javaw.exe Befehle recht nicht keine Aufmerksamkeit auf $JAVA_OPTS zahlen

Gleiches gilt für _JAVA_OPTIONS gilt ... die eine ist, die ich vorher nicht gesehen habe.

+0

Ich habe versucht, diese über die Eingabeaufforderung zu setzen, aber seine wirft einen fehler- -Djava.net.preferIPv6Stack‘nicht als interne oder externe Befehl, ein Programm oder Batch-Datei erkannt. – user27

+0

Lesen Sie den manuellen Eintrag für den Befehl 'java' * sorgfältig *. Die Option "-D" funktioniert, wenn Sie sie richtig verwenden. –

+0

manuelle Eingabe funktioniert in meinem Fall nicht oder vielleicht bin ich nicht in der Lage, es richtig zu tun, hoffe, dass die Injektion funktioniert. thnkx – user27

0

Sie müssen in Ihrem Umgebungspfad vor dem Ausführen der ausführbaren Java-Datei einfügen. in Linux

export JAVA_OPTS="-Djava.net.preferIPv4Stack=true" (same for ipv6) 
+0

Ich mache es in Windows-Maschine, also was sollte der Variablenname sein. – user27

+0

Gehe zu: Mein Computer -> Eigenschaften -> Systemvoraussetzungen -> Umgebungsvariablen -> Unter Systemvariable eine neue mit dem Namen JAVA_OPTS und dem entsprechenden Wert -Djava ... erstellen –

+0

Es ist ** _ JAVA_OPTIONS ** nicht JAVA_OPTS – RealHowTo