Użyłem TMP
zmiennej środowiskowej do kontrolowania rzeczy, takich jak miejsce, w którym gcc zapisuje swoje pliki tymczasowe, ale nie mogę znaleźć odpowiednika dla API createTempFile w Javie .
Czy taka zmienna środowiskowa istnieje?
Użyłem TMP
zmiennej środowiskowej do kontrolowania rzeczy, takich jak miejsce, w którym gcc zapisuje swoje pliki tymczasowe, ale nie mogę znaleźć odpowiednika dla API createTempFile w Javie .
Czy taka zmienna środowiskowa istnieje?
Odpowiedzi:
Hmmm - ponieważ jest to obsługiwane przez JVM, zagłębiłem się trochę w kod źródłowy maszyny wirtualnej OpenJDK, myśląc, że może to, co robi OpenJDK, naśladuje to, co robi Java 6 i wcześniejsze. Nie jest uspokajające, że można to zrobić inaczej niż w systemie Windows.
W systemie Windowsget_temp_directory()
funkcja OpenJDK wykonuje wywołanie interfejsu API Win32 GetTempPath()
; w ten sposób w systemie Windows Java odzwierciedla wartość TMP
zmiennej środowiskowej.
W systemach Linux i Solaris te same get_temp_directory()
funkcje zwracają statyczną wartość /tmp/
.
Nie wiem, czy rzeczywisty JDK6 przestrzega dokładnie tych konwencji, ale po zachowaniu na każdej z wymienionych platform wydaje się, że tak.
-Djava.io.tmpdir
opcji wiersza poleceń do maszyny JVM) i czy ma to wpływ na tę wartość domyślną wszystko przez wartość środowiskową. Jak ludzie zauważyli, w systemie Windows ma na nią wpływ TMP
zmienna środowiskowa, ale nie było jasne, czy istnieje jakaś nieznana zmienna dla innych systemów operacyjnych. Wygląda na to, że nie ma, przynajmniej biorąc pod uwagę to, co wiemy o OpenJDK.
GetTempPath()
nie wpływa tylko TMP
zmienna środowiskowa: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
(z początkowym ukośnikiem), jest nawet błąd # 4391434 . A w przypadku systemów Mac OS i Linux jest to/tmp
- co za bałagan!
oracle-java8-jdk=8u102
(linux)
Według java.io.File
Java Docs
Domyślny katalog plików tymczasowych jest określony we właściwości systemowej java.io.tmpdir. W systemach UNIX domyślną wartością tej właściwości jest zazwyczaj „/ tmp” lub „/ var / tmp”; w systemach Microsoft Windows jest to zazwyczaj „c: \ temp”. Ta właściwość systemowa może mieć inną wartość, gdy wywoływana jest wirtualna maszyna Java, ale programowe zmiany tej właściwości nie mają żadnego wpływu na katalog tymczasowy używany przez tę metodę.
Aby określić java.io.tmpdir
właściwość System, można wywołać maszynę JVM w następujący sposób:
java -Djava.io.tmpdir=/path/to/tmpdir
Domyślnie ta wartość powinna pochodzić ze TMP
zmiennej środowiskowej w systemach Windows
java.io.tmpdir
jest definiowany za pomocą funkcji Windows SDK GetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ), która rozwiąże TMP lub TEMP lub USERPROFILE lub katalog Windows, jeśli każdy z poprzednia nie jest zdefiniowana.
Możesz ustawić _JAVA_OPTIONS
zmienną środowiskową. Na przykład w bashu wystarczyłoby to:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Umieściłem to w moim skrypcie logowania bash i wydaje się, że działa.
Picked up _JAVA_OPTIONS:
to całkowicie dezorientuje nasz proces kompilacji.
JAVA_TOOL_OPTIONS
jest bardziej przenośna.
Posługiwać się
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Aby mieć jasność co do tego, co się tutaj dzieje:
Zalecany sposób ustawić tymczasową lokalizację katalogu jest ustawić właściwość system o nazwie „java.io.tmpdir”, na przykład przez podanie opcji -Djava.io.tmpdir=/mytempdir
do java
polecenia. Właściwość można również zmienić z poziomu programu, wywołując System.setProperty("java.io.tmpdir", "/mytempdir)
... modulo kwestie bezpieczeństwa piaskownicy.
Jeśli właściwość „java.io.tmpdir” nie zostanie jawnie ustawiona podczas uruchamiania, maszyna JVM zainicjuje ją na wartość domyślną specyficzną dla platformy . W przypadku systemu Windows wartość domyślna jest uzyskiwana przez wywołanie metody interfejsu API Win32. W systemie Linux / Solaris wartość domyślna jest najwyraźniej połączona na stałe. W przypadku innych maszyn JVM może to być coś innego.
Z empirycznego punktu widzenia zmienna środowiskowa „TMP” działa w systemie Windows (z obecnymi maszynami JVM), ale nie na innych platformach. Jeśli zależy Ci na przenośności, powinieneś jawnie ustawić właściwość systemową.