debugging, know How&Why

maven 업데이트 했는데 ClassNotFoundException 인 경우

그라파나 2022. 5. 16. 16:49

필자는 프로젝트 svn에서 찝어와서 새로 팔 때 종종 발생했었다. 

 

해당 에러를 3번 정도 겪어보고 누가 해결해주는거 옆에서 보니 그제서야 이해가 되더라..

 

구글링을 하다보면

대부분의 경우 다음 3가지를 실행하면 해결된다고 하는데...

1. maven update
2. project clean
3. sever clean
4. .m2지우고 다시 update(라이브러리 자체에 문제있는 경우가 아니라면..)

 

이거 아는 사람의 경우 혹은 해봤는데 안되요의 경우를 보겠다. (내가 그랬다)

maven repository는 멀쩡한데.java는 에러 ?

분명 buildpath 에서 잘 잡혀있는 것을 확인했다.

진행중인 프로젝트 명같은게 나와서 일단 가려봤다.

cf. 만약에 이 화면에서 해당 라이브러리가 빨간색으로 X 표시가 나있다면 해당 위치에 해당 라이브러리가 없다는 뜻이다. 빌드를 다시 잡거나 해당 위치에 들어게끔 해야한다.

Add Jars, Add Library, Edit를 통해 알맞은 라이브러리 파일 경로를 잡아줘야 한다.


 

근데 왜 프로젝트에서 이유없이 에러가 발생하는가? 이유가 없진 않았다.

jre 에러인 경우 빌드패스나 maven 레파지토리를 아무리 뒤져도 표가 안난다. 

 

근데 프로젝트에서는 표가 난다.

 

프로젝트 전체에 에러가 발생해 있을 것이다.

 

.java의 서비스나 컨트롤러 대부분에서 빨간줄이 그어져 있을 것이다. (화면을 캡처 못했다)

 

특히 보통 어노테이션이나 lombok을 보면 표가 확난다.

 

.java 중 vo의 getter, setter라던가. service imple 이라던가. 괜히 빨간줄 그어져있는 것들

 

서버를 빌드했는데 .class.not.found.exception이 우수수 뜬다면.

java.lang.ClassNotFoundException 괜히 이런녀석이 뜬다면 

 

이녀석들이 왜 빨간색이지에 대해 물음표가 생긴다면 반드시 jre를 의심해봐야 한다. 

이게 정상이다.

 

혹시라도 environment가 jre로 되있다면 jdk로 바꾸고 eclipse를 재시작 해보자

바로 되더라.  문송이의 경우에는 jdk가 잘못 잡혀있었다. (환경변수 탓이 아님) 

 

설치를 안하고 jdk만 잡아 줬을 경우에는 문제가 생길 수도 있다는 사실을 알게되었다.

이 경우에는 jdk를 다시 설치해서 설치된 jre로 변경해주는 것이 바람직해보인다는 문송한 생각이다.

 

난 JDK의 설치 관련해서는 전문가가 아니지만, java 자체를 무설치로 사용하고 있었다. 환경변수 편집을 통해 시스템에서 jdk를 사용할 수 있도록 잡아줬고, javac 등의 명령어가 정상 실행하는 것을 보았다. 하지만 해결된 내용은 '설치'였다.

 

그래서 이유가 뭐였고 넌 뭘 잘못했었는데?

에러가 고쳐진 과정은 다음과 같았다.

1. lombok을 다시 깔아봤다. (vo의 getter, setter에서 에러가 났기에)

2. lombok을 깔다가 이상한점 확인 -> .jar 파일을 윈도우에서 실행시키지 못한다. (java아이콘이 안뜬다)

3. java 1.8 (jdk-8u291-windows-x64)을 오라클 가서 다시 받아서 설치했다.

4. 환경변수 재설정(새로 받은 jdk로)

5. 이클립스에서 재편성한 jdk로 바꿈. 

6. 에러 해결!

 

이유를 좀 찾아보기로 했다.

1. 환경설정시

open jdk를 파일로 작성해서 환경변수 편집해서 썼다. 다른건 잘 되었었다. java든, vs코드든, eclipse든

잘 돌아가는 것을 분명 확인하고 demo, sample project를 실행했을 경우 잘 돌아갔다.

 -> java를 프로그램으로 안깔았다. 그냥 jdk를 불러오는 것이랑 프로그램 설치랑 이게 무슨 차이가 있는지는 나중에 고수님께 문의해보겠다.

 

2. open jdk로 사용한 경우 뭐가 달랐는가?

-> .jar 파일을 연결프로그램이 없어 읽지 못했다. lombok.jar의 경우 더블클릭하면 프로그램이 실행된다.

 

잘 모르고 대충 넘어간 부분. jre와 jdk.

jre만 되어있으면 .jar를 실행 못시키는 경우가 간혹 있다 하더라.

 

우선 개념을 다시 짚어보자면

jdk  >  jre  >  jvm

jre 는 jvm + 기본lib 

jdk 는 jvm + jre + 개발키트( javac이라던가 jdb라던가 추가되어있다. )

 

jdk를 설치하면 읽기 쓰기 가능, jre는 읽기만 가능

 

그래서 환경에서 jar 파일을 열려면 jre만 있으면 된다고 생각했다. 실제로도 그렇고. 

 

하지만 여러가지 환경에서 예상치 못한 에러가 나는 경우 jre 하나만 가지고 실행이 안되는 경우가 있다더라.

 

그말인 즉슨 jre만으로 안되는 경우에는 jdk를 사용해서 해결 되는 경우도 있다는 것.

 

cf. build path 설정 후 lib들을 Open Implementation해보면

jre가 build path일때는 접근이 안되지만 jdk가 build path일때는 접근이 된다. 

 

도움이 되었으면 하는 마음에. 블로깅.

 

 

과제가 남았다.

open jdk 미설치 폴더 지정 및 환경변수 편집으로 java가 동작하게 만들어서 

eclipse를 돌렸는데 방금 에러가 난 경우, jdk-oracle 버전으로 설치해서 해결한 상황.

 

이상황은 무슨 차이가 있는지 다음에 알아보고자 한다. (고수님들 답글 달아주시면 감사합니다.)

 

그래도 안되는데요? 하는 분은

혹은 롬복 에러도 같이 보이고 있다면 이글을 참고해주기 바란다.

롬복 에러 -> 각종 VO에서 getter, setter, annotation 안되는 것들

https://ihyeonspoa.tistory.com/36

 

egov는 custom eclipse로 인식된다.

egovFrame 은 이클립스IDE를 기반으로 한 Java Spring 베이스 전자정부 표준 프레임워크이다. 거두절미하고 egov의 이클립스는 무엇이냐? 라고 한다면 정답은 custom eclipse요. 라고 답할 수 있다. 이걸 염

ihyeonspoa.tistory.com