개인기록

[기록] WARNING: An illegal reflective access operation has occurred

ran4 2022. 9. 9. 22:58

환경 : jdk 11, springframework 5.0.2

 

 

[로그]

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

 

 

이 로그는 일종의 경고 메세지일 뿐 실제로 프로그램의 구동에 지장을 주는 오류는 아니다

하지만 로그가 신경쓰여서 해결방법을 찾아보았다 

오류메세지를 구글링해보니 jdk와 스프링 버전으로 인한 문제로 파악되었다

 

원인을 좀 더 파고들어 보면 Java 9 이후 모듈이 도입되면서 reflection에 대한 경고가 발생하기 때문인데,

더 자세한 내용은 해당 문서를 참고하길 바란다 : 

https://www.logicbig.com/tutorials/core-java-tutorial/modules/illegal-access-operations.html 

 

 

해결법 

모듈이 없는 이전 버전인 jdk 8을 사용하거나

jdk 11에 맞게 버전을 수정 ─ 혹은 아래처럼 예외처리를 해주어야 한다 

 

 

1. 위의 문구는 경고일 뿐 프로그램의 동작을 방해하는 에러가 아니다.
-> 코드는 정상적으로 작동하기 때문에 --illegal-access=permit 설정을 입력하여 예외를 설정한다  

<plugin>
  <configuration>
    <argLine>--illegal-access=permit</argLine>
  </configuration>
</plugin>

 

적용한 모습

 

 



2. spring 버전이 낮은 경우 jdk 버전을 1.8로 바꾼다

윈도우의 경우 환경변수 순서만 바꾸면서 사용할 수 있다

 

2-1. 혹은 pom.xml에서 스프링 버전을 올린다 

springboot는 2.1, spring을 사용하면 5.1.5 이상의 버전으로 올리면 된다

 

적용한 모습

 

 

 

올린후에는 maven > project update를 눌러준다 

 

 



3. 그럼에도 해결이 안되는 경우 

오류 메세지를 읽고 어느 부분에서 문제가 있는지 확인한다

WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 

-> 스프링 프레임워크 버전이 jdk와 안맞아서 출력되었다

-> springframework의 버전을 올려 해결한다 

 

해당 블로그처럼 메세지 2번째 줄의 메세지가 

org.apache.poi.util로 시작한다면 

poi 버전으로 인한 문제이기 때문에 버전을 업그레이드 해주면 된다 

 

 

> 나의 경우 

jdk 8로 바꾸는 것은 의미가 없었고, 스프링 프레임워크의 버전을 5.1.5로 바꾼 후

해당 경고 메세지가 사라졌다 

 

 

 

 

++ 

윈도우에서는 환경변수를 설정하여 jdk를 실행할 수 있는데, 

나의 경우 jdk 8과 11을 번갈아 사용하기 때문에 환경 변수에서 두 경로를 모두 추가 후

필요한 버전의 순서를 위쪽으로 바꾸어 사용한다

 

바꾼 후에는 cmd 창에서

java -version

javac -version

을 입력하여 제대로 바뀌었는지 확인할 수 있다