> Java > java지도 시간 > Java 9에서 '불법 반사 액세스' 경고를 어떻게 해결할 수 있습니까?

Java 9에서 '불법 반사 액세스' 경고를 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-15 03:06:11
원래의
562명이 탐색했습니다.

How Can I Resolve

Java 9의 불법 반사 액세스: ​​자세한 조사

Java 9에서는 불법 반사 액세스 개념이 도입되어 zahlreichen이 발생했습니다. 해결 방법 이 오류 메시지에 대한 질문입니다. 이 문서에서는 불법 반사 액세스의 특성, 경고를 트리거하는 상황 및 가능한 해결 방법을 자세히 살펴보겠습니다.

Java 9의 모듈 시스템에는 불법 반사 액세스를 이해하는 데 핵심이 되는 모듈성#강력한 캡슐화 완화 개념이 도입되었습니다. 모듈의 코드를 통해 다른 모듈 코드 및 표시되는 패키지에 액세스하는 것은 엄격하게 제어됩니다. 그러나 Java 9의 경우 모듈의 강력한 캡슐화가 완화될 수 있습니다.

런타임 시스템은 다음 작업을 제공할 수 있습니다.

  • 정적 액세스: 컴파일된 바이트코드를 통해 제공됩니다.
  • 런타임 호출: 은 이름이 지정되지 않은 모든 모듈의 코드로 하나 이상의 모듈로 구성된 하나 이상의 패키지를 사용하여 런타임 시스템을 호출할 수 있습니다. 열기.

불법 접근의 개념

다음과 같은 상황에서 리플렉션 API가 성공적으로 호출되면 "불법" 리플렉션 액세스가 발생합니다.

  • 일반적으로 호출은 실패합니다.
  • 런타임 시스템에서 "불법 액세스"가 활성화되었습니다.

경고 실행 메커니즘

Java 9의 캡슐화 완화는 새로운 시작 옵션 --illegal-access를 통해 컴파일 타임에 제어할 수 있습니다. 기본적으로 이 옵션은 허용으로 설정됩니다. 이 모드에서는 해당 패키지에 대한 첫 번째 반영된 액세스 작업이 경고를 트리거하지만 추가 경고는 발행되지 않습니다. 이 경고에는 추가 경고를 활성화하는 방법에 대한 정보가 포함되어 있습니다.

구성 옵션

--illegal-access 옵션은 다음 모드로 구성할 수 있습니다.

  • debug: 각 해당 항목에 대해 인쇄 메시지 및 스택 추적에 액세스합니다.
  • 경고: 각 액세스에 대해 메시지를 인쇄하세요.
  • 거부: 이 유형의 작업을 비활성화합니다.

디버깅 및 복구 권장 사항

  • --illegal-access=deny를 사용하여 애플리케이션을 실행하여 ( " 이러한 지시문 열기를 포함하거나 --add-opens VM 인수를 명시적으로 사용하여 한 모듈에서 다른 모듈로 패키지를 엽니다.
  • --jdk-internals 옵션과 함께 jdeps 도구를 사용하여 컴파일된 코드에서 JDK 내부 API에 대한 정적 참조를 식별합니다.

경고 메시지 예시

불법적인 반사 접근 연산이 감지될 때 내보내는 경고 메시지는 다음 형식을 따릅니다.

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM
로그인 후 복사

여기서:

  • $PERPETRATOR: 리플렉션 작업을 트리거하는 코드가 포함된 유형의 정규화된 이름과 사용 가능한 코드 소스(예: JAR 파일 경로).
  • $VICTIM: 둘러싸는 유형의 정규화된 이름을 포함하여 액세스 중인 멤버를 설명하는 문자열입니다.

주의 사항

이러한 경고를 방지하고 향후 보안을 보장하려면 모듈에서 이러한 불법 반사 액세스를 수행하지 않도록 해야 합니다.

위 내용은 Java 9에서 '불법 반사 액세스' 경고를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿