Ich habe die TMP
Umgebungsvariable verwendet, um beispielsweise zu steuern, wo gcc seine temporären Dateien schreibt, aber ich kann anscheinend kein Äquivalent für die createTempFile- API von Java finden .
Existiert eine solche Umgebungsvariable?
Ich habe die TMP
Umgebungsvariable verwendet, um beispielsweise zu steuern, wo gcc seine temporären Dateien schreibt, aber ich kann anscheinend kein Äquivalent für die createTempFile- API von Java finden .
Existiert eine solche Umgebungsvariable?
Antworten:
Hmmm - da dies von der JVM erledigt wird, habe ich mich ein wenig mit dem OpenJDK VM-Quellcode befasst und gedacht, dass das, was OpenJDK macht, vielleicht das nachahmt, was Java 6 und früher macht. Es ist nicht beruhigend, dass es einen anderen Weg gibt als unter Windows.
Unter Windows führt die OpenJDK- get_temp_directory()
Funktion einen Win32-API-Aufruf durch GetTempPath()
. Auf diese Weise spiegelt Java unter Windows den Wert der TMP
Umgebungsvariablen wider .
Unter Linux und Solaris geben dieselben get_temp_directory()
Funktionen einen statischen Wert von zurück /tmp/
.
Ich weiß nicht, ob das tatsächliche JDK6 genau diesen Konventionen entspricht, aber aufgrund des Verhaltens auf jeder der aufgelisteten Plattformen scheint dies der Fall zu sein.
-Djava.io.tmpdir
, wenn er nicht selbst festgelegt wird (über die Befehlszeilenoption für die JVM) und ob dieser Standardwert bei beeinflusst wird alles durch einen Umgebungswert. Da die Menschen beobachtet hatten, auf Windows es wird von dem betroffenen TMP
Umgebungsvariable, aber es war unklar , ob es eine unbekannte Variable für andere Betriebssysteme war. Es sieht so aus, als gäbe es keine, zumindest angesichts dessen, was wir über OpenJDK wissen.
GetTempPath()
ist nicht nur von der TMP
Umgebungsvariablen betroffen : msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
(mit führendem Schrägstrich) ist, dafür gibt es sogar den Fehler # 4391434 . Und für Mac OS und Linux ist es/tmp
- was für ein Durcheinander!
oracle-java8-jdk=8u102
(Linux)
Laut den java.io.File
Java Docs
Das Standardverzeichnis für temporäre Dateien wird durch die Systemeigenschaft java.io.tmpdir angegeben. Auf UNIX-Systemen lautet der Standardwert dieser Eigenschaft normalerweise "/ tmp" oder "/ var / tmp". Auf Microsoft Windows-Systemen ist dies normalerweise "c: \ temp". Diese Systemeigenschaft kann einen anderen Wert erhalten, wenn die Java Virtual Machine aufgerufen wird. Es ist jedoch nicht garantiert, dass programmatische Änderungen an dieser Eigenschaft Auswirkungen auf das von dieser Methode verwendete temporäre Verzeichnis haben.
Um die java.io.tmpdir
Systemeigenschaft anzugeben , können Sie die JVM wie folgt aufrufen:
java -Djava.io.tmpdir=/path/to/tmpdir
Standardmäßig sollte dieser Wert aus der TMP
Umgebungsvariablen auf Windows-Systemen stammen
java.io.tmpdir
mithilfe der Windows SDK - Funktion definiert ist GetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ), der TMP oder TEMP oder USERPROFILE oder das Windows - Verzeichnisses , wenn jeder wird beheben das vorherige ist nicht definiert.
Sie können Ihre _JAVA_OPTIONS
Umgebungsvariable festlegen . Zum Beispiel in Bash würde dies den Trick tun:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Ich habe das in mein Bash-Login-Skript eingefügt und es scheint den Trick zu tun.
Picked up _JAVA_OPTIONS:
Dies verwirrt unseren Erstellungsprozess völlig.
JAVA_TOOL_OPTIONS
ist portabler.
Verwenden
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Um klar zu sein, was hier los ist:
Die empfohlene Methode zum Festlegen des temporären Verzeichnisverzeichnisses besteht darin, die Systemeigenschaft "java.io.tmpdir" festzulegen, z. B. indem Sie -Djava.io.tmpdir=/mytempdir
dem java
Befehl die Option geben . Die Eigenschaft kann auch innerhalb eines Programms geändert werden, indem System.setProperty("java.io.tmpdir", "/mytempdir)
... modulo sandbox-Sicherheitsprobleme aufgerufen werden.
Wenn Sie die Eigenschaft "java.io.tmpdir" beim Start nicht explizit festlegen, initialisiert die JVM sie mit einem plattformspezifischen Standardwert. Für Windows wird die Standardeinstellung durch einen Aufruf einer Win32-API-Methode erhalten. Für Linux / Solaris ist die Standardeinstellung anscheinend fest verdrahtet. Für andere JVMs könnte es etwas anderes sein.
Empirisch funktioniert die Umgebungsvariable "TMP" unter Windows (mit aktuellen JVMs), jedoch nicht auf anderen Plattformen. Wenn Sie sich für Portabilität interessieren, sollten Sie die Systemeigenschaft explizit festlegen.