JDK11.An illegal reflective access operation has occurred

Byungkyu Ju
byungkyu-ju
Published in
4 min readJul 7, 2020

JDK11 환경에서 개발중 위 메시지와 같은 에러가 발생했다.

아래와 같이 HATEOAS의 methodOn에서 자신의 Class를 직접 호출하는 부분에서 에러가 발생하였으며, 컴파일에는 문제가 없었다.

// code
linkTo(methodOn(Some.class))
// console
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils (file:******.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.2.7.RELEASE/56e14a3a5e2813534b5db2da1502cd58ab5bc61d/spring-core-5.2.7.RELEASE.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils
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 9 이상의 환경에서 CGLIB의 JDK API 내부에서 발생한 것으로,
Spring Framework 4.3 기준 실행중 문제는 없다고 한다.

해결하려면JDK 8버전으로 JDK를 내리거나, Spring Framework 5.1 이상
혹은 SpringBoot 2.1 이상의 버전을 올리면 된다고 하지만 안된다!!

Spring projects의 issue에 올라왔던 내용이며, Spring5.1 이상에서는 해결이 됐다고 하지만, 해당 버전을 사용하지 않기 때문에 해결됐는지는 모르겠다.

내 블로그 최대 조회수가 이 포스트에서 나온다…

intellij 기준 상단의 Run/Debug Configurations에서
VM options에 illegal-access=warn 옵션을 주어서 우선 메시지는 막을 수 있다.

--

--