윈도우 환경에서 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 파일을 잘 실행하면 잘 수행된다.
'SW Developer' 카테고리의 다른 글
[Git] merge error: you need to resolve your current index first 해결 (0) | 2021.08.24 |
---|---|
[Docker] 지원하지 않는 콘솔 설정 레거시 콘솔을 사용하지 않도록 설정 방법 (0) | 2021.02.25 |
[서버운영] Ubuntu Redmine 서버 시간 보정 방법 rdate (0) | 2020.08.26 |
[JNI] IntelliJ IDEA jni 헤더파일 (header file) javah 명령어 설정하기 (0) | 2020.08.10 |
[JNI] javah Error : Could not find class file for 해결방법 (0) | 2020.08.10 |
댓글