Я використовував TMP
змінну середовища для контролю таких речей, як, де gcc пише, що це тимчасові файли, але я не можу знайти еквівалент API JavaTaTeTFFile для Java .
Чи існує така змінна середовище?
Я використовував TMP
змінну середовища для контролю таких речей, як, де gcc пише, що це тимчасові файли, але я не можу знайти еквівалент API JavaTaTeTFFile для Java .
Чи існує така змінна середовище?
Відповіді:
Хммм - оскільки цим керує JVM, я трохи заглибився у вихідний код OpenJDK VM, думаючи, що, можливо, те, що робиться OpenJDK, імітує те, що зроблено Java 6 та попередніми. Це не запевняє, що існує інший спосіб, ніж в Windows.
У Windowsget_temp_directory()
функція OpenJDK робить виклик Win32 API GetTempPath()
; так у Windows, Java відображає значення TMP
змінної середовища.
На Linux та Solaris одні і ті ж get_temp_directory()
функції повертають статичне значення /tmp/
.
Я не знаю, чи відповідає дійсний JDK6 цим точним умовам, але поведінка на кожній із перерахованих платформ здається, що вони є.
-Djava.io.tmpdir
командного рядка до JVM), і якщо це значення за замовчуванням впливає на все за значенням середовища. Як спостерігали люди, на Windows , то це залежить від TMP
змінної оточення, але було неясно, чи є якась - то невідома змінна для інших операційних систем. Схоже, немає, принаймні з огляду на те, що ми знаємо про OpenJDK.
GetTempPath()
не впливає лише TMP
змінна середовища: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
(з провідним косою рисою), є навіть помилка # 4391434 . А для Mac OS та Linux це/tmp
- який безлад!
oracle-java8-jdk=8u102
(linux)
За даними java.io.File
Java Docs
Каталог тимчасових файлів за замовчуванням визначається властивістю системи java.io.tmpdir. У системах UNIX типовим значенням цього властивості є "/ tmp" або "/ var / tmp"; для систем Microsoft Windows зазвичай це "c: \ temp". Цьому властивості системи може бути надано інше, коли викликається віртуальна машина Java, але програмні зміни цього властивості не гарантують жодного впливу на тимчасовий каталог, використовуваний цим методом.
Щоб вказати java.io.tmpdir
властивість системи, ви можете викликати JVM наступним чином:
java -Djava.io.tmpdir=/path/to/tmpdir
За замовчуванням це значення має надходити від TMP
змінної середовища в системах Windows
java.io.tmpdir
визначається за допомогою функції SDK для Windows GetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ), яка визначатиме TMP або TEMP або USERPROFILE або каталог Windows, якщо кожен з них попередній не визначений.
Ви можете встановити свою _JAVA_OPTIONS
екологічну змінну. Наприклад, у bash це зробить трюк:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Я вклав це в свій скрипт для входу в bash, і, здається, це зробити трюк.
Picked up _JAVA_OPTIONS:
Це повністю заплутує наш процес збирання.
JAVA_TOOL_OPTIONS
є більш портативною.
Використовуйте
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Щоб було зрозуміло, що відбувається тут:
Рекомендований спосіб встановити місце розташування тимчасового каталогу є встановити властивість системи під назвою «java.io.tmpdir», наприклад , з допомогою опції -Djava.io.tmpdir=/mytempdir
до java
команди. Властивість також можна змінити в межах програми, зателефонувавши System.setProperty("java.io.tmpdir", "/mytempdir)
... Проблеми безпеки пісочниці.
Якщо ви не встановите явно властивість "java.io.tmpdir" під час запуску, JVM ініціалізує його до певного для платформи значення за замовчуванням. Для Windows за замовчуванням отримується виклик методу API Win32. Для Linux / Solaris за замовчуванням, мабуть, є провідним. Для інших JVM це може бути щось інше.
Емпірично змінна середовища "TMP" працює в Windows (з поточними JVM), але не на інших платформах. Якщо ви ставитесь до портативності, вам слід чітко встановити властивість системи.