UNIX/Linux 시스템에서 사용자 계정으로 java 컴파일이 발생한 경우 다음과 같은 에러가 발생한다. 이는 컴파일이나 라이브러리를 구동할 때 사용하는 임시파일을 쓸 권한이 없어 발생하는 문제이다. 특히 root권한을 가진 계정으로 구동 시에 문제가 없을 경우는 100% 권한으로 인한 문제이다. 다만 매번 root 계정을 사용할 수 없으므로, 해당 권한이 필요한 디렉토리가 어디인지 확인하고 시스템/사용자 계정에 쓰기권한을 부여해야 한다.
실제 발생했던 에러와 테스트를 위해 구현한 에러 메세지는 조금 다른데, 핵심은 아래와 같다.
java.io.IOException : Permision denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile
본 case의 경우 /tmp 내에 2개의 디렉토리가 생성되는데, 각각의 디렉토리가 생성되는 이유는 아래와 같다.
1. Hsperfdata 디렉토리 및 내부의 파일은 JVM에서 모니터링을 수행하기 위해 생성된다.
2. poifiles 디렉토리는 Apache POI API를 사용할 경우 /tmp에 생성된다. Apache POI API의 역할은 다양한 포맷의 문서파일에서 text를 추출하는 역할을 수행한다. (https://poi.apache.org/text-extraction.html)
Solution
JVM 및 Apache POI API가 정상적으로 /tmp 디렉토리에서 쓰기작업을 할 수 있도록 해당 계정에 쓰기 권한을 부여한다.