티스토리 뷰

728x90

일반적으로 jar 니까 WEB-INF/lib 에 둔다면 처음엔 잘 되다가 다른 객체가 컴파일되고 디플로이되면 다음과 같은 오류가 발생합니다.

Caused by: java.lang.UnsatisfiedLinkError:
Native Library libXC_v3_jni.so already loaded in another classloader

라이브러리는 하나의 클래스로더에서 로드되고 나면, 다른 클래스로더에서는 불러 올 수 없다는 의미이고, 해당 jar 라이브러리를 WEB-INF/classes 나 WEB-INF/lib 같은 Reloadable Classpath 에 위치하게 되면 발생합니다.

jar나 class 는 반드시 System Classpath 에 위치시켜야 합니다. OS 의 환경변수와 기동 스크립트의 -classpath 를 조정하던지, 각 WAS에서 제공하는 설정을 이용하면 됩니다.

부연하면 native 메서드를 사용하는 라이브러리의 경우 System Class Path에 두면 Reloadable이 일어나지 않을 것입니다.

무조건 jar나 class를 시스템 클래스에 두는 건 특정 응용에서 사용하는 jar 파일의 버전이 올라갈 경우 ClassNotFoundException이나 Dependencies에 관련된 예외를 볼 수 있게 하는 요인이 되기 때문에, native 메서드를 사용하는 경우에만 System Class Path에 두는 게 좋은 것 같습니다.

'Java' 카테고리의 다른 글

[java] ObjectInputStream, ObjectOutputStream 이야기  (0) 2021.06.29
댓글