본문 바로가기
SW Developer

[IntelliJ] IDEA Exception in thread "main" java.lang.NoClassDefFoundError 해결방법

by ashespia 2021. 1. 14.
SMALL

 

 

 

윈도우 환경에서 IntelliJ IDEA를 통해 error 없이 빌드하고 실행하였는데 java.lang.NoClassDefFoundError error가 발생하면서 라이브러리 lib를 인데 찾을 수 없다고 한다.

 

타겟 보드에서 jar 를 통해 실행했을 때 아래와 같은 error가 발생한다.

 

Hello, AMI Java !
Exception in thread "main" java.lang.NoClassDefFoundError: com/dreamsecurity/amicipher/AMICipher
        at Test.main(Test.java:369)
Caused by: java.lang.ClassNotFoundException: com.dreamsecurity.amicipher.AMICipher
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

 

원인 파악 1 : 내 jar 파일에 참조하는 라이브러리 libary를 포함하지 않는 경우 외부 경로 확인 

외부에서 참조하는 형태로lib를 넣지 않고  jar 파일을 만들었다면

Runtime에 실행시점에 라이브러리로 사용하는 jar 파일이 존재해야한다.

 

내가 만든 Class jar로 실행할 경로에 라이브러리 넣고 실행한 결과

정상적으로 Error 없이 동작 한다.

 

 

원인 파악 2 : 내 jar 파일에 참조하는 라이브러리 libary를 포함한 경우

artifacts 경로의 생성된 jar 파일을 압푹프로그램으로 열어서 확인해 보자

아래 처럼 라이브러리가 있지 않다면 java.lang.NoClassDefFoundError 발생은 당연한 거다.

 

아래는 내가 생성한 jar 파일에서 참조하는 class 가 정상적으로 있는 경우 이다.

아래 캡쳐 화면은 java jar 파일을 압축프로그램에서 한번에 펼쳐보기 형태로 본것이다.

그래서 tree 형태로 보이지 않는다. 

IntelliJ IDEA 에서 Build Aartifacts 실행해서 생성한 jar에 넣는다고 넣은 jar 파일이 없다면 설정을 확인해 보자

사용할 라이브러리는 소스 코드 상의 lib 폴더를 만들고 이곳에 추가해주었다.

 

 

IntelliJ IDEA > File > Project Structure > Project Settings > Aartifacts에서 + 눌러서 아래와 같이 세팅해주었다.

 

코드상의 Main 클래스가 있는 것 선택해 주고 JAR files from libraries에서 extract to the target JAR  선택 후 OK

 

 

하면 사용할 Library가 Extracted ***.jar로 들어가 있다.

 

jar 파일을 잘 실행하면 잘 수행된다.

 

LIST

댓글