Tomcat 6.0.35의 두 웹 응용 프로그램에 필요한 라이브러리 (jar 파일)가 있습니다. jar 파일의 클래스 중 하나는 네이티브 라이브러리를 실행해야합니다. 예상대로 두 개의 응용 프로그램을 동시에 deplayed 경우Tomcat의 여러 웹 응용 프로그램에서 공유 네이티브 라이브러리를 처리하는 방법
, 나는 예외
java.lang.UnsatisfiedLinkError: Native Library my-native-library.so already loaded in another classloader
을 얻고있다. jar 파일 내에서
는, 네이티브 라이브러리는 정적 블록static { try { System.loadLibrary("my-native-library.so"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } }
및 네이티브 라이브러리를 사용하여 XML을 사용하여 구성 할 수있는 클래스를 사용하여로드됩니다.
jar 라이브러리는 우리가 만든 검색 엔진이므로 필요한 경우 다시 빌드 할 수 있습니다.
제 질문은 Tomcat에게 my-native-library.so가 다른 웹 응용 프로그램에 의해로드되었고이 응용 프로그램에 대해 정적 블록이 무시 될 수 있음을 어떻게 알 수 있습니까?
편집 : jar 라이브러리와 웹 응용 프로그램 모두 maven을 사용하고 있습니다.
감사합니다.
편집 : 내 이해함으로써이 :
검색 엔진 라이브러리는 단지 라이브러리로 구축 할 수있는 내-네이티브 library.jar 파일이 필요합니다. 그런 다음 검색 엔진 jar 라이브러리가 저장소에서 호스팅되고 maven을 사용하여 웹 응용 프로그램에 빌드됩니다. 서버가 시작되면 LD_LIBRARY_PATH 및 공유 lib 경로가있는 JAVA_OPTS가 노출되고 서버는 my-native-library.so를 한 번만로드 할 수 있습니다. 그러나 두 웹 응용 프로그램에는 검색 엔진 jar가 포함되어 있으며 my-native-library.jar은 WEB_INF/lib 및 예외에 있습니다.
WEB_INF/lib에서 my-native-library.jar을 제거하려면 필요한 종속성 (my-native-library.jar)없이 검색 엔진 라이브러리를 다시 빌드해야합니다.
. 나는 [여기] (http://stackoverflow.com/questions/3724421/native-library-already-loaded-in-another-classloader) 시작하는 것이 좋습니다 것입니다. – Perception