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?
java
configuration
environment-variables
temp
Zach Hirsch
źródło
źródło
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 Windows
get_temp_directory()
funkcja OpenJDK wykonuje wywołanie interfejsu API Win32GetTempPath()
; 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.
źródło
-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ływTMP
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 tylkoTMP
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 DocsAby określić
java.io.tmpdir
właściwość System, można wywołać maszynę JVM w następujący sposób:Domyślnie ta wartość powinna pochodzić ze
TMP
zmiennej środowiskowej w systemach Windowsźródło
java.io.tmpdir
jest definiowany za pomocą funkcji Windows SDKGetTempPath
( 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:Umieściłem to w moim skrypcie logowania bash i wydaje się, że działa.
źródło
Picked up _JAVA_OPTIONS:
to całkowicie dezorientuje nasz proces kompilacji.JAVA_TOOL_OPTIONS
jest bardziej przenośna.Posługiwać się
źródło
Nie jest to zmienna środowiskowa, ale nadal zapewnia kontrolę nad katalogiem tymczasowym:
dawny.:
źródło
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
dojava
polecenia. Właściwość można również zmienić z poziomu programu, wywołującSystem.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ą.
źródło
Użyj poniższego polecenia na terminalu UNIX:
Spowoduje to wyświetlenie wszystkich właściwości Java i ustawień systemowych. W tym poszukiwaniu
java.io.tmpdir
wartości.źródło