Невозможно создать tempDir, java.io.tmpdir установлен в C: \ Windows \ - PullRequest
0 голосов
/ 30 мая 2018

Я использую Spring Boot со встроенным tomcat, все работало нормально, и внезапно я получил ошибку:

Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to create tempDir. java.io.tmpdir is set to C:\Windows\
    at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:183)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:165)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134)
    ... 11 common frames omitted
Caused by: java.io.IOException: Access is denied
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createTempFile(File.java:2024)
    at java.io.File.createTempFile(File.java:2070)
    at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:174)
    ... 14 common frames omitted

Я не делал никаких манипуляций с пользовательскими или системными переменными.

Моя переменная TEMP user ищет C: / Users / me / AppData / Local / Temp, и я полагаю, что tomcat должен использовать это значение вместо системного, которое фактическиC: / Windows / Temp

Ответы [ 5 ]

0 голосов
/ 04 апреля 2019

В Windows GetTempPathA используется для поиска временного каталога.Алгоритм:

1. The path specified by the TMP environment variable.
2. The path specified by the TEMP environment variable.
3. The path specified by the USERPROFILE environment variable.
4. The Windows directory.

Поэтому, если ваше приложение запущено без определения TMP & TEMP & USERPROFILE, вы получите java.io.tmpdir == GetWindowsDirectoryA .

Обычно приложения устанавливают java.io.tmpdir внутри app-run.bat (через -D...=...) или app.properties.

Я столкнулся с этой проблемой, потому что задача Gradle Test не будет передавать переменные среды, если environmentсвойства не передаются, а заменяются:

test {
    environment = ["A": "1", "B": "2"] // won't work, because it replaces envs
}

test {
    environment( ["A": "1", "B": "2"] ) // will work, because it appends to existing envs
}
0 голосов
/ 09 декабря 2018

Если вы используете проверку затмения «Добавить к переменным среды» в окне «Переменные среды» в конфигурации Run / Debug.

Благодаря ответу @max выше

я использовал JAVA EE eclipse -фотон

0 голосов
/ 21 июня 2018

Если вы используете IDEA, отметьте «Включить родительские переменные среды» в окне «Переменные среды» в конфигурации «Запуск / отладка».

0 голосов
/ 28 июня 2018

В моем случае проблема возникла, когда я изменил библиотеку рабочего пространства по умолчанию с [jre.1.8.0_121] на [jdk.1.8.0_121].Возвращение к jre, похоже, решило проблему.

0 голосов
/ 20 июня 2018

Я наблюдал следующее поведение

  • изменил все внезапно
  • работает, если запуск из командной строки как автономный jar
  • не выполняется при запуске из IntelliJ(2018.1)

В качестве быстрого обходного пути я явно добавил -Djava.io.tmpdir=$EXISING_DIR_WITH_WRITE_ACCESS в качестве параметра JVM в конфигурациях запуска.

...