Переменная окружения для управления java.io.tmpdir?

Я использовал TMP Переменная окружения для управления такими вещами, как, например, где gcc записывает свои временные файлы, но я не могу найти эквивалент для java's createTempFile API.

Существует ли такая переменная среды?

10 ответов

Решение

Хммм - так как это обрабатывается JVM, я немного углубился в исходный код виртуальной машины OpenJDK, думая, что, возможно, то, что сделано OpenJDK, имитирует то, что было сделано в Java 6 и ранее. Это не заверяет, что есть способ сделать это, кроме как в Windows.

В Windows OpenJDK get_temp_directory() функция делает вызов Win32 API GetTempPath(); это то, как в Windows, Java отражает ценность TMP переменная окружения.

На Linux и Solaris одно и то же get_temp_directory() функции возвращают статическое значение /tmp/,

Я не знаю, соответствует ли настоящий JDK6 этим точным соглашениям, но по поведению на каждой из перечисленных платформ кажется, что они это делают.

Согласно java.io.File Документы Java

Каталог временных файлов по умолчанию указывается системным свойством 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

You could set your _JAVA_OPTIONS переменная среды For example in bash this would do the trick:

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

I put that into my bash login script and it seems to do the trick.

Использование

$ java -XshowSettings
Property settings:
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
    java.io.tmpdir = /tmp

Это не переменная окружения, но все же дает вам контроль над временным каталогом:

-Djava.io.tmpdir

напр.:

java -Djava.io.tmpdir=/mytempdir

Чтобы было понятно, что здесь происходит:

  • Рекомендуемый способ установки местоположения временного каталога - установить свойство System с именем "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), но не на других платформах. Если вы заботитесь о переносимости, вы должны явно установить системное свойство.

Используйте следующую команду на терминале UNIX:

java -XshowSettings

Это отобразит все свойства Java и системные настройки. В этом искать java.io.tmpdir значение.

в настоящее время источник: https://github.com/openjdk/jdk/search?l=Java&p=4&q=java.io.tmpdir и используется только свойство.

для линукса:

      // This must be hard coded because it's the system's temporary
// directory not the java application's temp directory, ala java.io.tmpdir.
const char* os::get_temp_directory() { return "/tmp"; }

для окон:

        if (GetTempPath(MAX_PATH, path_buf) > 0) {
    return path_buf;
  } else {

https://github.com/openjdk/jdk/blob/eab4c0c49934bd6f37a0b6174ca10e5c8708d13b/src/hotspot/os/windows/os_windows.cpp#L1366

и здесь для яблока:https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/jdk.attach/macosx/native/libattach/VirtualMachineImpl.c#L322

мы можем изменить место загрузки файла tomcat по умолчанию, как

мы должны установить переменную среды, например: CATALINA_TEMPDIR = ВАШЕ МЕСТО ЗАГРУЗКИ ФАЙЛА. это место изменит путь здесь: java -Djava.io.tmpdir=/path/to/tmpdir

Если вы посмотрите исходный код JDK, вы увидите, что для систем unix свойство считывается во время компиляции из paths.h или жестко запрограммировано . Для окон функция GetTempPathWиз win32 возвращает tmpdirимя.

Для posix-систем вы можете ожидать, что стандарт будет работать, но это не так. Вы можете подтвердить, что TMPDIRне используется при запуске TMPDIR=/mytmp java -XshowSettings

Другие вопросы по тегам