Java2013. 12. 4. 14:56
반응형

 이클립스에서 자바 개발을 수행하다 보면 아래와 같은 경고 메시지를 접할때가 있다.

Access restriction: The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program Files\Java\jdk1.6.0_45\jre\lib\rt.jar


※실제 경고 메시지 스크린 샷


 위의 경고를 배제하는 방법은 크게 두가지로 나뉘는데 이클립스의 경고레벨을 낮춰서 에러를 감추는 방법으로 문제를 일시적으로 감추는 방법과 실제적으로 경고를 해결하는 방법이다.


- 이클립스의 경고레벨을 낮추는 방법


 빨갛게 표시된 부분의 경고 레벨을 Error에서 Warning이나 Ignore로 낮추면 일단 빨간 경고 메시지는 사라지게 된다. Warning으로 변경했을 경우엔 대신 노란 Warning을 보게된다.


 위의 경고의 의미는 특정 JVM벤더에 종속적인 라이브러리(즉 각 벤더별JVM내부에서만 사용하도록 작성된 라이브러리)를 참조하고 있다는 것을 경고하는 것이다. 따라서 위와같은 일시적인 해결방법으로는 Write Once, run anywhere라는 자바 모토와는 다르게 특정 JVM벤더에 종속되는 결과를 가져오게 되어 다양한 환경에 적용할 수 없게 되버리는 결과를 가져오게 된다. 


 예로든 메시지 상의 문제를 야기한 클래스인 BASE64Decoder의 경우 패키지가 sun.misc 즉 선마이크로시스템의 패키지이다. 따라서 다른 JVM의 런타임 라이브러리엔 존재하지 않을 가능성이 매우 높아 보인다. BASE64인코더/디코더의 경우 apache-commons-codec라이브러리에 다른 구현체가 존재하므로 참조를 변경해서 개발을 진행하면 깔끔하게 문제를 해결할 수 있다. 물론 다른 클래스 이용의 경우엔 그에 맞는 구현체를 찾아야 하고 최악의 경우엔 운용환경의 JVM벤더를 제한하는 방법을 택할 수밖에 없는 경우도 있으므로 상황에 맞추어 잘 대처하도록 하면 되겠습니다.




Posted by Reiphiel