LANGUAGE/!$%!% ERROR NOTE
[Java] jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.net.URLClassLoader
forgiveall
2020. 4. 15. 13:32
Java
1. Error - 오류
java.lang.reflect.InaccessibleObjectException: Unable to make jdk.internal.loader.ClassLoaders$AppClassLoader(jdk.internal.loader.ClassLoaders$PlatformClassLoader,jdk.internal.loader.URLClassPath) accessible: module java.base does not "opens jdk.intern
2. Problem - 문제
https://blog.csdn.net/Fighting_Boss/article/details/91043555
因为在 Java 9+ 以上版本中不允许使用动态加载类,因为想要使用就需要加两个参数给虚拟机
번역하면..
Java 9 이상에서는 동적 로딩 클래스가 허용되지 않으므로
가상머신에두 개의 매개 변수를 추가해야
하기 때문에
- 혹은
Java8 이하에서 작업하던 분이라면
, 갑자기 Java9로 업데이트가 되었다거나 했을 상황도 있을 것 같다.- =>
Java Version을 확인해보고 Downgrade
하시길 바란다.
- =>
3. Solved - 해결
Java를 실행할 때, 다음 옵션을 추가하자.
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED
특정 프로그램의 문제라면
VMOptions
같은 옵션이 있을 수 있다. 그곳에 위 문구를 추가하여 적용하면 된다.Example: -jar를 이용한 실행
java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED -jar xx.jar
Example: -cp를 이용한 실행
java --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED -cp "${PATH_TO_LIB_DIR}/*" com.something.Starter
4. Reference - 참조
- jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.net.URLClassLoader: https://blog.csdn.net/Fighting_Boss/article/details/91043555
- Base ClassLoader No Longer from URLClassLoader: https://community.oracle.com/thread/4011800
- Java 9 Compatibility #187: https://github.com/java-decompiler/jd-gui/issues/187#issuecomment-367157588
- 런타임에 Jar를 동적으로로드해야합니까?: https://it-man.tistory.com/1627
- Java 클래스 로딩 과정(Java Class Loading Process): https://engkimbs.tistory.com/606
- Naver D2 - JVM Internal: https://d2.naver.com/helloworld/1230