Linux_Ubuntu

[에러해결] Linux에서 Java 실행 시 NoClassDefFoundError

15호의 개발자 2021. 12. 16. 17:38
반응형

[에러해결] Linux에서 Java 실행 시 NoClassDefFoundError

 

 

 

  • 에러 메시지
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/WorkbookFactory
at TestClass.main(TestClass.java:56)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.WorkbookFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 2 more

 

 

 

  • 해결

구글링 해보니 apache poi 버전 호환이 안 되는 것이라고 나와있었다. 윈도우 환경에서는 정상적으로 실행이 되더라도 리눅스에서는 버전 호환을 엄격하게 따지기 때문인지 동작하지 않는다고 하였다. 나의 경우도 그러했다. poi 라이브러리 파일들이 여러 개라면 각각의 버전을 동일하게 맞춰야 하고, 가급적 최신 버전을 사용하라고 나와있었다. 나도 처음에는 버전을 맞춰보려고 하였지만 뭔가 이상함을 느꼈고, 결국 다른 방법으로 해결하였다.

나의 경우는 lib 폴더 하위에 여러 개의 라이브러리를 넣어둔 상황이었다. 위의 에러메시지를 보니 apache poi 라이브러리 하나만 문제가 되는 줄 알았지만, 특정 라이브러리 문제는 아니었던 것 같다.

 

아래와 같이 컴파일과 런타임 모두 class path로 lib 폴더를 설정해두니 에러가 해결되었다.

 

javac -cp /home/java/test-project/lib/*:/home/java/test-project/src TestClass.java

java -cp /home/java/test-project/lib/*: TestClass

 

반응형