programing

접근 제한:Application' 유형이 API가 아닙니다(필수 라이브러리 rt.jar에 대한 제한).

prostudy 2022. 6. 25. 19:30
반응형

접근 제한:Application' 유형이 API가 아닙니다(필수 라이브러리 rt.jar에 대한 제한).

코드는 다음과 같습니다.

package mscontroller;

import javax.swing.*;
import com.apple.eawt.Application;

public class Main {
    public static void main(String[] args)
    {
        Application app = new Application();
        app.setEnabledAboutMenu(true);

        AMEListener listener = new AMEListener();
        app.addApplicationListener(listener);
        JFrame mainFrame = new JFrame("Application Menu Example");
        mainFrame.setSize(500, 500);
        mainFrame.setVisible(true);
    }
}

에러는 다음과 같습니다.

Exception in thread "main" java.lang.Error: Unresolved compilation
problems:   Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    AMEListener cannot be resolved to a type    AMEListener cannot be
resolved to a type

    at mscontroller.Main.main(Main.java:9)

이클립스는 이렇게 말합니다.

접근 제한:애플리케이션' 유형이 API가 아닙니다(필수 라이브러리 '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'에 대한 제한 사항).

저도 같은 일이 있어서, 이미 여기서의 답변이 만족스럽지 않아서, 스스로 조사를 했습니다.

배경:Eclipse 액세스 제한

Eclipse에는 퍼블릭 API의 일부가 아니라고 생각되는 클래스를 실수로 사용하는 것을 방지하기 위한 접근 제한이라는 메커니즘이 있습니다.보통, 이클립스는 두 가지 면에서 모두 옳다.우리는 보통 공개 API에 포함되지 않은 것을 사용하고 싶지 않습니다.그리고 이클립스는 일반적으로 퍼블릭 API의 일부와 일부분이 아닌 것에 대해 옳다.

문제

「API」와 , 비API 를 .sun.misc(당신이 무엇을 하고 있는지 모르는 한, 당신은 하지 말아야 합니다.) 않는 수 이클립스를 사용하고 ).javax.smartcardio이 경우 이클립스에서 이 오류가 발생합니다.

솔루션

해결책은 접근 제한을 변경하는 것입니다.

  • Java ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
    • 즉, "Package Explorer"에서 프로젝트의 컨텍스트 메뉴에서 "Properties"를 선택합니다.
  • "Java 빌드 경로", "라이브러리" 탭으로 이동합니다.
  • 라이브러리 항목을 펼칩니다.
  • 택한한다
    • "접근 규칙",
    • "편집..." 그리고
    • 가ible..." "" : 규칙패턴과 함께 "Add..."액세스 가능"과 대응하는 규칙 패턴을 지정합니다.에겐 '그건방진짜javax/smartcardio/** """이 될 수 com/apple/eawt/**

나도 같은 문제를 겪고 있었다.Eclipse에서 Java 프로젝트를 처음 만들었을 때 JRE 8을 지정했습니다.프로젝트의 빌드 패스에 들어가 JRE 시스템 라이브러리를 편집했을 때 Java 8 실행 환경이 선택되었습니다.Alernate JRE(Java 8)를 사용하기로 선택했을 때 오류가 수정되었습니다.

이클립스 산소에 javafx 액세스 권한을 추가하려면 project > properties > java build path > libraries > 다음으로 라이브러리를 전개하고 액세스 규칙을 더블 클릭하여 권한 Resolution : Accessible Rule Pattern : javafx / ** 를 설정합니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력

(및 관련 없는) 첫 번째 명령어플리케이션의 인스턴스화Application당신만의 클래스는 의도된 용도가 아닌 것 같습니다.소스로부터 읽어낼 수 있는 것으로는, 에 의해서 반환되는 스태틱인스턴스를 사용하는 것이 바람직합니다.getApplication().

이클립스한 적이 있습니다.Access restriction: The method ... is not API (restriction on required project)슈퍼클래스로부터 그 메서드를 계승한 오브젝트의 메서드로 문제의 메서드를 호출했습니다.슈퍼클래스가 들어간 패키지를 플러그인에서 Import한 패키지에 추가하면 됩니다.

그러나 "필수 프로젝트/라이브러리 제한"에 따라 오류의 원인은 매우 다양합니다.위에서 설명한 문제와 마찬가지로 사용 중인 유형은 라이브러리에서 내보내지 않는 패키지에 종속되어 있거나 자체 내보내지 않을 수 있습니다.이 경우 누락된 패키지를 추적하여 여기에 제시된 대로 직접 내보내거나 액세스 규칙을 사용할 수 있습니다.기타 생각할 수 있는 시나리오는 다음과 같습니다.

  • Eclipse는 공용 Java API(솔루션 1, 2)에 속하지 않는 사용 가능한 패키지를 사용하지 않도록 합니다.
  • 종속성이 여러 소스에 의해 충족되고 버전이 충돌하는 등(솔루션 1, 2, 3)
  • Eclipse는 JDK가 필요한 경우(여기에서는 에러에 따라 솔루션) 또는 프로젝트 빌드 경로에서 JRE/JDK 버전이 올바르지 않은 경우) JRE를 사용하고 있습니다.

이는 실제 답변이라기보다 제약과 관련된 문제들을 혼합한 것에 가까웠다.그러나 필수 프로젝트에 대한 제한은 보고해야 할 다용도적인 오류이기 때문에, 완벽한 레시피는 아직 찾을 수 있을 것입니다.

Window -> Preferences -> Java -> 설치된 JRE를 사용하여 JDK 1.8을 기반으로 구축하도록 애플리케이션을 변경해야 했습니다.그러나 이를 변경한 후에도 프로젝트 탐색기에 지정된 JRE 시스템 라이브러리는 여전히 올바르지 않습니다.이 문제를 해결하려면 "JRE System Library [wrong-jre-here] (JRE 시스템 라이브러리 [wrong-jre-here])를 오른쪽 클릭하여 실행 환경에서 "Workspace Default (yer-default-here)" (워크스페이스 기본값(yer-default-here)"로 변경합니다.

여기에 이미지 설명 입력

제 프로젝트와 관련된 프로젝트 패싯이 잘못된 자바 버전이었기 때문에 이 문제가 있었습니다.

이 문제를 해결하기 위해 다음을 수행했습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
  2. 'Project Facets'를 선택하고 Java 버전을 1.4보다 큰 버전으로 변경합니다.
  3. [적용]을 클릭합니다.

그러면 프로젝트가 재구축되고 오류가 해결되기를 바랍니다.

동작: 프로젝트 속성 -> Project Facets -> 런타임 -> jdk1.8.0_45 -> 적용

Eclipse 상단 메뉴 모음에서 다음을 수행합니다.

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning

Spring Tool Suite에서 동일한 문제가 발생하는 경우:

스프링 툴 스위트 IDE 이클립스com.sun.net를 클릭합니다 SR1.2) 오류를 제거하고 (STS) Eclipse Luna SR1(4.4.2)을 사용합니다.

  • [ Project ]> [ Properties ]으로 이동합니다.
  • Java 컴파일러 제목을 펼칩니다.
  • 오류/경고 클릭
  • 사용되지 않고 제한된 API 확장
  • "금지된 참조(액세스 규칙)" 옆에서 "무시"를 선택합니다.
  • [ Discourged reference ( access rules ) ]옆에서 [무시]를 선택합니다.

가도 돼

같은 문제가 있었어.해결 방법은 다음과 같습니다. 패키지 탐색기로 이동합니다.JRE 시스템 라이브러리를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동합니다.프로젝트 빌드 경로에 대한 Classpath Container > Select JRE에서 세 번째 옵션(워크스페이스 기본 JRE)을 선택합니다.

출처 : https://thenewboston.com/forum/topic.php?id=3917

IBM RAD(Rational Application Developer)를 사용하고 있는데 동일한 문제가 발생했습니다.

오류 메시지:

접근 제한:'JAXWSProperties' 유형은 API가 아닙니다(필수 라이브러리 'C:\'에 대한 제한 사항).IBM\RAD95\jdk\jre\lib\rt.jar')

솔루션:

Java 빌드 경로로 이동하여 라이브러리 탭에서 JRE 시스템 라이브러리를 제거합니다.[ Add Library ](라이브러리 추가) --> JRE System Library (JRE 시스템 라이브러리)

다음의 설정으로 이동합니다.

창 - > 설정 - > Java - Compiler - Errors / Warnings - 폐지 및 제한된 API - Forbidded 참조(액세스 규칙)

「 」로 합니다.Warning ★★★★★★★★★★★★★★★★★」Ignore.

이클립스 Mars.2 eclipse (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
JRE... 편집:워크스페이스 (jdk1.8.0_77)

저는 좋아요.

저는 JRE 8.112를 일식했습니다.그것이 중요한지는 모르겠지만, 제가 한 일은 다음과 같습니다.

  1. 내 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭
  2. 속성으로 이동하여 클릭했다.
  3. Java 빌드 경로 폴더 클릭
  4. 일단 안으로 들어가자, 나는 주문과 수출에 들어갔다.
  5. JRE 시스템 라이브러리 확인 [jre1.8.0_112]
  6. 다른 JRE 시스템 라이브러리 위로 이동(이것이 중요한지 아닌지 확실하지 않음)
  7. 그리고 OK를 눌렀다.

이것으로 내 문제는 해결되었다.

이클립스 마켓플레이스에 e(fx)클립스를 추가하기만 하면 됩니다.간단하고 심플한

오래된 질문이더라도, Eclipse에서 저는 Src 폴더와 속성(Alt+Enter)을 마우스 오른쪽 버튼으로 클릭하고Ignore optional compile problems에러를 삭제.

여기에 이미지 설명 입력

기존/구성 시스템 라이브러리 삭제: 이클립스(IDE) -> 프로젝트 탐색기 -> 프로젝트 이름 -> (옵션) 빌드 경로 구성 -> Java 빌드 경로 -> 라이브러리 -> (선택) JRE 시스템 라이브러리 [(For Me)1.8.0_23] 삭제

현재 같은 위치에 있습니다.이클립스(IDE) -> 프로젝트 탐색기 -> 프로젝트 이름 -> (옵션) 빌드 경로 -> 빌드 경로 구성 -> Java 빌드 경로 -> 라이브러리

동일한 시스템 라이브러리 다시 추가:라이브러리 추가 -> JRE 시스템 라이브러리 -> 워크스페이스 기본값 JRE ((For Me) jre1.8.0_231) -> 종료 -> 적용 -> 닫기

이제 끝낼 때까지 기다려.

난 이클립스 네온 3를 쓰고 있어.javafx.application을 사용하고 싶었을 뿐입니다.어플리케이션, 그래서 위의 Christian Hujer의 답변을 따라 했더니 효과가 있었습니다.몇 가지 힌트: 접근규칙은 Import 스테이트먼트와 매우 유사합니다.제가 추가한 액세스 규칙은 "javafx/application/**"입니다.Import 스테이트먼트의 점을 슬래시로 대체하면 규칙이 됩니다.도움이 됐으면 좋겠다.

나는 조금 다른 문제가 있었다.Project - Properties - Libraries - JRE Library에서 잘못된 JRE lib 버전이 있습니다.제거 후 실제 설정 후 voila - allAccess restriction...경고는 사라졌어

maven 실행 중 CI 툴에서만 이 문제가 발생하는 경우, 제가 생각한 것은 실행 환경을 명시적으로 정의하는 것이었습니다.MANIFEST.MF.

제 경우 OSGi 번들 매니페스트 파일에 다음 행을 삽입하여 이 작업을 수행했습니다.

Bundle-RequiredExecutionEnvironment: JavaSE-1.8

접근제한 패키지를 매니페스트에 추가하는 것이 효과가 있었습니다.MF 파일Eclipse에서 여러 파일의 문제 탭에 "접근 제한됨" 오류가 표시되었습니다.각 오류를 오른쪽 클릭하고 "Quick Fix"를 클릭한 후 "Add '[package] to imported package"를 선택합니다.

는 이클립스에서도 .4.20.0JRE 1.8의오류를 다음 을 수행합니다.

Project --> Properties --> Java Compiler --> Errors/Warnings --> Deprecated and Restricted API --> Forbidden Reference (access rules) -->  ignore

언급URL : https://stackoverflow.com/questions/25222811/access-restriction-the-type-application-is-not-api-restriction-on-required-l

반응형