2012-05-11 5 views
1

내 사무실에서 Eclipse 32bit를 사용하고 JavaAST 을 구문 분석 할 Java 코드를 개발하고 있지만이 프로그램을 집에서 실행하려고하면이 예외가 발생합니다. 예외가 발생한 곳도 제공하고 있습니다.Java AST 용 Java 보안 예외

어떻게이 예외를 해결할 수 있습니까?

미리 감사드립니다. : -)

예외 라인

ASTParser parser = ASTParser.newParser(AST.JLS3); 

보안 예외

Exception in thread "main" java.lang.SecurityException: class "org.eclipse.core.runtime.Plugin"'s signer information does not match signer information of other classes in the same package 
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:943) 
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:657) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:785) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.eclipse.jdt.core.dom.ASTParser.initializeDefaults(ASTParser.java:235) 
    at org.eclipse.jdt.core.dom.ASTParser.<init>(ASTParser.java:218) 
    at org.eclipse.jdt.core.dom.ASTParser.newParser(ASTParser.java:118) 
    at tester.runTest.main(runTest.java:33) 
+0

집에서 클래스를 다시 컴파일했거나 바이너리 .class 파일 만 삭제 했습니까? –

+0

또한 [확인] (http://stackoverflow.com/q/2877262/520779) (가능한 중복) - 직접 답변을 찾은 후 바로 (내 대답은 정확할 수도 있지만 다른 원인도 가능하다고 생각합니다) – mgibsonbr

답변

1

Java 문서에이 페이지를 참조하십시오 \ Sealing Packages within a JAR File. 그것은 당신이보고있는 오류의 가능한 원인입니다.

요약하면 jar 파일이 봉인 된 경우 JVM은 이라고 가정하고 모든 클래스의 해당 jar 패키지가 해당 jar 파일 내부에 정의되어야합니다. 동일한 패키지에 속한 프로젝트의 다른 부분에 코드가있는 경우 보안 예외로 간주됩니다.

집에서 실행중인 코드가 사무실에서 실행중인 코드와 비슷한 구조로되어 있는지 확인하십시오. 해당 jar 파일에 정의 된 동일한 패키지에 속하는 일반 클래스 .java 파일에 정의 된 클래스를 CLASSPATH에서 액세스 할 수 있습니다. 프로젝트에서 불필요한 종속성을 제거하여 (가능한 한 작업 환경과 비슷하게 보임) 문제가 해결되는지 확인하십시오.

편집 : 나는 잘못이 봉인 에 대한을 체결 할 수도 있습니다; 관련 문서는 Signing and Verifying JAR Files입니다. 가능한 원인 및 가능한 해결 방법은 동일합니다 ...

+0

감사합니다. 나는 동일한 내용의 두 병을 가지고있었습니다. –

+0

어쨌든 매우 유용한 정보였습니다. 감사. 하지만 지금은 왜 내 사무실 시스템에는 종속성에 대해 동일한 저장소가 있지만 문제가 없는지 궁금합니다. –

0

이 오류는 병을 두 번 추가 할 때 발생합니다. 일부 클래스를 공유하는 항아리를 두 개 이상 추가하면 지금보고있는 오류로 끝납니다.

동시 병을 제거한 다음 코드를 테스트 해 보시기 바랍니다.

희망이 도움이됩니다.