Я использовал TMP
переменную среды для управления такими вещами, как то, где gcc записывает временные файлы, но я не могу найти эквивалент для Java- API createTempFile .
Существует ли такая переменная окружения?
Я использовал TMP
переменную среды для управления такими вещами, как то, где gcc записывает временные файлы, но я не могу найти эквивалент для Java- API createTempFile .
Существует ли такая переменная окружения?
Ответы:
Хммм - поскольку это обрабатывается 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
свойство System, вы можете вызвать JVM следующим образом:
java -Djava.io.tmpdir=/path/to/tmpdir
По умолчанию это значение должно поступать из TMP
переменной среды в системах Windows.
java.io.tmpdir
определяется с помощью функции Windows SDK 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 значение по умолчанию получается путем вызова метода Win32 API. Для Linux / Solaris по умолчанию явно установлено жесткое соединение. Для других JVM это могло быть что-то другое.
Опытным путем переменная среды "TMP" работает в Windows (с текущими JVM), но не на других платформах. Если вы заботитесь о переносимости, вы должны явно установить системное свойство.