programing

org.springframework.cglib.core의 반사 액세스가 잘못되었습니다.리플렉트유틸스$1

sourcetip 2023. 4. 2. 21:04
반응형

org.springframework.cglib.core의 반사 액세스가 잘못되었습니다.리플렉트유틸스$1

JDK 9+181 스프링 부트 2.0.0BUILD-SNAPSHOT CLI 응용 프로그램은 부팅 시 다음 경고를 표시합니다.

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

이것은 콘솔 어플리케이션이기 때문에 이 경고를 비활성화해야 합니다.어떻게 하면 좋을까요?

주의: 이 질문은 스프링에 의해 트리거된 이 경고를 비활성화하는 방법에 대한 구체적인 질문을 합니다.JDK9의 복제품이 아닙니다.부정한 리플렉티브액세스 조작이 발생했습니다.org.python.core.다른 라이브러리에서 유사한 증상을 처리하는 PySystemState.

JDK 9+에서 JVM에 다음 옵션을 추가하여 스프링의 CGLIB 사용에 따른 경고를 사용하지 않도록 설정합니다.

--add-opens java.base/java.lang=ALL-UNNAMED

예를 들어 다음과 같습니다.

java --add-opens java.base/java.lang=ALL-UNNAMED -jar target/*.jar

보고할 필요 없어요. 알려진 봄 벌레니까요.

이 문제는 새로운 JDK 9 모듈시스템이 부정 액세스를 검출했기 때문에 발생합니다.이러한 액세스는 가까운 장래에 허가되지 않습니다.JDK 9 모듈 시스템에 대한 자세한 내용은 여기를 참조하십시오.

업데이트:

이 문제에 대한 수정은 스프링 5.1 이상에서 JDK 9+를 사용할 수 있습니다.

JDK 11 및 Spring Boot 2.2.1(Spring Core 5.2.1)에서도 이 문제가 발생했습니다.

도움이 된 것은, 에의 의존을 없애는 것이었습니다.org.springframework.boot:spring-boot-devtools Spring Framework 22814에 대한 일부 코멘트에서 제시된 바와 같이.

위의 Jan Nielsen 답변에 덧붙여 Spring core 5.0.7에 의존하는 Intelliz 및 Spring Boot 2.0.3을 사용하고 있는 경우, 아직 문제가 해결되지 않고 있습니다.

내게 출구는 두 가지가 필요했다.

  • Jan에서 언급한 --add-open을 실행/디버깅 구성에 추가합니다.구성을 편집하고 환경 / VM 옵션 아래를 보십시오.이를 통해 일부 "불법 액세스 메시지"를 차단할 수 있습니다.

  • 또한 jaxb-api 라이브러리에 종속성을 추가해야 했습니다.이번기트허브에 대한 발렌틴보시의 코멘트에서 힌트를 얻었다.

스프링 이니셜라이저를 사용할 때는 반드시 최신 버전의 스프링부트를 사용하십시오.Spring core 5.1 이상이 자동으로 표시되므로 프로젝트를 실행할 때 오류가 발생하지 않습니다.

따라서 JVM 구성을 편집할 필요가 없습니다.

경고 후에도 앱이 아직 작동하지 않으면 이 의존관계를 pom.xml에 추가합니다.

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

이게 도움이 됐어요!!

이 버전을 사용해도 경고 메시지가 나타납니다.

  • Spring Boot 2.4.1
  • Spring Core FW : 5.3.2 (부모 pom은 Spring Boot의 것이므로 이 버전은 제가 수동으로 설정하는 것이 아니라 Spring Boot에 의해 도입됩니다)
  • Java openjdk 버전 "11.0.9.1" 2020-11-04

spring-boot-devtools에서 종속성을 제거하는 것도 도움이 되었고 시작 시 경고가 표시되지 않게 되었습니다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

...결국 클래스 패스가 변경되었을 때 IDE에서 자동 재기동을 사용하고 있었습니다.클래스 패스를 변경하지 않고 나갈 수 있었습니다., 스프링 문서에 따르면 이 문제에 대해 걱정할 필요가 없습니다.

완전히 패키지화된 응용 프로그램을 실행하면 개발자 도구가 자동으로 비활성화됩니다.java -jar를 사용하여 어플리케이션을 기동하거나 특별한 클래스 로더를 사용하여 기동했을 경우, 「실가동 어플리케이션」으로 간주됩니다.

따라서 응용 프로그램이 명령줄에서 실행되면 경고가 사라질 것으로 예상할 수 있습니다(확인하지 않았습니다).

Spring Boot 3 Java 19 spring spring spring spring 。.package-info.java파일입니다. 제 오류는 다음과 같습니다.

Caused by: java.lang.IllegalAccessError: class fetch.App$$EnhancerBySpringCGLIB$$4423c935 (in module ABC) cannot access class org.springframework.cglib.core.ReflectUtils (in unnamed module @0x50378a4) because module ABC does not read unnamed module @0x50378a4

내 " " "ABC 「」를 .module-info.java:

    requires spring.context;
    requires spring.core;
    requires spring.beans;

언급URL : https://stackoverflow.com/questions/46671472/illegal-reflective-access-by-org-springframework-cglib-core-reflectutils1

반응형