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?
java
configuration
environment-variables
temp
Zach Hirsch
quelle
quelle
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 durchGetTempPath()
. Auf diese Weise spiegelt Java unter Windows den Wert derTMP
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.
quelle
-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 betroffenenTMP
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 derTMP
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 DocsUm die
java.io.tmpdir
Systemeigenschaft anzugeben , können Sie die JVM wie folgt aufrufen:Standardmäßig sollte dieser Wert aus der
TMP
Umgebungsvariablen auf Windows-Systemen stammenquelle
java.io.tmpdir
mithilfe der Windows SDK - Funktion definiert istGetTempPath
( 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:Ich habe das in mein Bash-Login-Skript eingefügt und es scheint den Trick zu tun.
quelle
Picked up _JAVA_OPTIONS:
Dies verwirrt unseren Erstellungsprozess völlig.JAVA_TOOL_OPTIONS
ist portabler.Verwenden
quelle
Es ist keine Umgebungsvariable, gibt Ihnen aber dennoch die Kontrolle über das temporäre Verzeichnis:
Ex.:
quelle
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
demjava
Befehl die Option geben . Die Eigenschaft kann auch innerhalb eines Programms geändert werden, indemSystem.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.
quelle
Verwenden Sie den folgenden Befehl auf dem UNIX-Terminal:
Dadurch werden alle Java-Eigenschaften und Systemeinstellungen angezeigt. In diesem
java.io.tmpdir
Wert suchen .quelle