Hi my name is
63
2022-07-07 00:31:33 작성 2022-07-07 05:24:29 수정됨
0
118

src 폴더에 없는 java 파일에 대해서 class 파일이 만들어져요 ㅠㅠ


안녕하세요..

계속 생각하다가 원인에 대해서 감도 못잡겠어서 조언을 구하려고 왔습니다 ㅠㅠ

현재 인텔리제이에서 maven에 webapp 아키타입을 사용하고 있구요..

제가 이전에 만들었다가 삭제한 java 파일이 있었는데요..


문제를 발견한 경위는 다음과 같습니다.

1. 리플렉션으로 classes 폴더에 있는 class파일들에 Class.forName() 메서드로 접근해서 getMethods()를 메서드를 사용해서 메서드들을 보려고 하는데 갑자기 디버깅이 멈춘 상태로 가만히 있는겁니다.

2. 디버깅을 하면서 멈춘곳을 찾아보니 옛날에 만들었다가 삭제한 클래스가 보이더니 해당 클래스에서 getMethods()하는 곳에서 멈추더라구요.. 일단 어떻게 불러왔는지는 아래 사진으로 말씀드리는게 더 이해를 도울거같아요.




제가 제 코드에 대해 이해하고 있는 정도는

실제 src 폴더에 존재하는 java 파일에 대해서 .class로 불러와서 getResource() 메서드를 사용해서 실제 해당 클래스파일이 생성되는 경로를 획득합니다. 실제 획득한 경로는 classes폴더의 하위에 아까 구했던 클래스가 있던 경로였습니다.


여기까진 제가 생각한대로 획득했어요.


그리고나서 dfs 탐색으로 해당 폴더의 하위에 있는 클래스들에 대해서 리플렉션으로 불러왔습니다. Class.forName() 으로 말이죠.


거기까지도 잘 됐어요. 근데 얻어온 클래스 이름이 만약 A라고 하면 A.getMethods() 로 메서드들을 불러오려는데 갑자기 디버깅이 멈추더니 계속 가만히 있는겁니다..


그래서 찾아보니 삭제했던 java 파일에 대한 클래스가 해당 경로에 있는거에요..

그리고 그 부분에서 디버깅이 뻑나는? 현상이 발생했습니다. 다른곳에선 괜찮았고 혹시해서 문제 클래스때만 동작하지 않도록 if문으로 감싸봤는데 다른 클래스들은 잘 되더군요


제가 나름 혼자 해보려고 시도해본게

1. java 파일을 만들고 빌드해서 class파일이 생기는지 확인해봤는데 생겼습니다. (잘됨)

2. 만들었던 java 파일을 지우고 다시 빌드했습니다. -> 생겼던 class 파일이 사라지더군요. 여기서 저는 이 경로가 진짜 classes경로라는걸 확신했습니다.


그래서 혹시나 하는 마음에 문제였던 클래스(최초에 문제가 되었던 그 클래스 맞습니다.)를 폴더에서 삭제해봤어요. 그리고 빌드해봤습니다. 그랬는데 다시 해당 문제 클래스가 생기는겁니다..ㄷㄷ..


3. 문제 클래스를 Class.forName()으로 불러와서 디버깅하면서 어떤 메서드들은 동작하고 어떤 메서드들은 동작하지 않는 와중에 try~catch문에 계속 넣어봤습니다.(아래처럼요!)


이러고 있었는데 정말 newInstance() 메서드에서만 익셉션이 걸렸습니다.......

이 이유도 알고싶습니다!!

발생한 익셉션은 java.lang.IllegalAccessException 이거에요!!


왜그러는지 알수있을까요?ㅠㅠ


0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.