sourcecode

tempDir를 생성할 수 없습니다. java.io .tmpdir가 C:로 설정되어 있습니다.\Windows\

codebag 2023. 9. 15. 20:59
반응형

tempDir를 생성할 수 없습니다. java.io .tmpdir가 C:로 설정되어 있습니다.\Windows\

Tomcat이 내장된 Spring Boot를 사용하고 있는데 모든 것이 정상적으로 작동하고 갑자기 오류가 발생했습니다.

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 사용자 변수는 C:/Users/me/AppData/Local/Temp를 보고 있는데 Tomcat이 시스템 1 대신 이 값을 사용해야 하는 것 같습니다. 이 값은 실제로는 C:/Windows/Temp입니다.

IDEA를 사용하는 경우 실행/디버그 구성의 환경 변수 창에서 "부모 환경 변수 포함"을 선택합니다.

Windows에서 GetTempPathA는 temp 디렉토리를 찾는 데 사용됩니다.알고리즘:

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==c:\Windows(https://learn.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya) .

일반적으로 애플리케이션 세트java.io.tmpdir안에서.app-run.bat( 경유)-D...=...) 또는app.properties.

내가 이 문제에 부딪힌 건 그래들 때문입니다.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
}

나는 다음과 같은 행동을 관찰했습니다.

  • 갑자기 변한
  • 명령행에서 자체 저장 항아리로 실행되는 경우 작동합니다.
  • IntelliJ(2018.1)에서 실행할 때 실패합니다.

빠른 해결 방법으로 명시적으로 추가합니다.-Djava.io.tmpdir=$EXISING_DIR_WITH_WRITE_ACCESS실행 구성에서 JVM 매개 변수로 사용됩니다.

eclipse를 사용하는 경우, Run/Debug Configuration의 Environment Variables 창에서 "환경 변수에 추가"를 선택합니다.

위의 @max 답변에 감사드립니다.

JAVA EE eclipse - photon.

제 경우에는 기본 작업 공간 라이브러리를 [jre.1.8.0_121]에서 [jdk.1.8.0_121]로 변경할 때 문제가 발생했습니다.jre로 다시 설정하면 문제가 해결된 것 같습니다.

언급URL : https://stackoverflow.com/questions/50605555/unable-to-create-tempdir-java-io-tmpdir-is-set-to-c-windows

반응형