java - Acceso reflexivo ilegal por org.springframework.cglib.core.ReflectUtils $ 1
spring-boot java-9 (4)
Mi aplicación JDK 9 + 181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLI muestra esta advertencia al inicio:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.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$1
Esta es una aplicación de consola, así que necesito deshabilitar esta advertencia. ¿Cómo puedo hacer eso?
Nota: esta pregunta plantea la pregunta específica de cómo deshabilitar esta advertencia activada por Spring; no es un duplicado de JDK9: se ha producido una operación de acceso reflexivo ilegal. org.python.core.PySystemState que trata un síntoma similar en una biblioteca diferente.
Agregando a la respuesta anterior de Jan Nielsen, si está utilizando Intellij y Spring Boot 2.0.3, que depende de Spring Core 5.0.7, todavía está atascado y no tiene la solución.
La salida para mí necesitaba dos cosas:
Agregue el --add-opens mencionado por Jan a su configuración de ejecución / depuración. Solo edite la configuración y busque en Environment / VM Options. Esto se encarga de silenciar algunos de los "mensajes de acceso ilegal".
También necesitaba agregar una dependencia a la biblioteca jaxb-api . Recibí la pista del comentario de ValentinBossi sobre este tema de primavera de github .
Cuando use el inicializador de primavera, asegúrese de usar la última versión de Spring Boot. Automáticamente obtiene Spring Core 5.1 o superior para usted y no verá el error cuando ejecute el proyecto.
Por lo tanto, no tiene que preocuparse por editar ninguna configuración de JVM.
Después de estas advertencias, si su aplicación aún no funciona, agregue esta dependencia a su pom.xml
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
¡Esto me ayudó!
En JDK 9+, agregue la siguiente opción a la JVM para deshabilitar la advertencia del uso de Spring CGLIB por parte de Spring:
--add-opens java.base/java.lang=ALL-UNNAMED
por ejemplo:
java --add-opens java.base/java.lang=ALL-UNNAMED -jar target/*.jar
No hay necesidad de reportarlo; Es un bicho de primavera conocido .
Esto sucede porque el nuevo sistema de módulos JDK 9 detectó un acceso ilegal que no se permitirá en el futuro (cercano). Puede leer más sobre el sistema del módulo JDK 9 aquí .
Actualización :
Una solución para este problema está disponible JDK 9+ con Spring 5.1+.