2015-01-14 2 views
0

특정 클래스 파일을 변경하여 jar를 배포 한 후 noclassdeffounderror가 표시됩니다. 7zip을 통해 jar 파일을 추출 할 때 jar 파일의 클래스 파일을 볼 수 있습니다.왜 배포 후 noclassdeffounderror가 발생합니까?

또한 .class 파일을 컴파일하여 오류를 찾아 냈지만 아무 것도 얻지 못했습니다.

배치 중 i .class 파일을 Eclipse 작업 공간에서 기존의 jar 파일로 끌어 올뿐입니다. 그게 중요한거야?

jar 파일이 컴파일되는 jdk 버전은 jre 1.7에서 실행 중이므로 1.7에서 실행되지만 배포 환경은 1.6입니다.

답변

-2

jdk 1.6에서 코드를 컴파일하면 완벽하게 작동합니다. java.security.SecureClassLoader는 두 버전에서 모두 변경됩니다. 그게 내가 왜 그 실수를 한 것 같아.

0

내 마음에 문제는 병에 추가 된 클래스가 다른 버전의 Java로 컴파일된다는 것입니다. 나는 당신이 1.7에서 컴파일했고 12c는 1.7을 실행하고, 11g는 1.6을 실행하고 있다고 생각한다. 1.6에서 클래스를 컴파일하고 jar에 추가하거나 1.7에서 jar를 다시 컴파일하고 실행중인 환경이 1.7 이상인지 확인하십시오.

+0

하지만 weblogic 12c 구성을 사용하여 동일한 서버에 하나의 jar 파일을 올바르게 배포했습니다. 하지만 weblogic 11g을 사용하여 배포하면이 사실을 알게됩니다. –

+0

두 서버 모두 동일한 버전의 Java를 실행하고 있습니까? –

+0

예, 당신은 그것을 정확하게 분석 JDK 1.7 + 웹 로직 12C = 완벽하게 작동 JDK 1.6 + 웹 로직 11g = 예외 java.lang.NoClassDefFoundError가 : java.lang.ClassLoader의에서 COM/델/gmfs/프레임 워크/JMS/QUtil .defineClass1 (네이티브 메소드) at java.lang.ClassLoader.defineClassCond (ClassLoader.java:631) at java.lang.ClassLoader.defineClass (ClassLoader.java : 615) at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:141) at weblogic.utils.classloaders.GenericClassLoader.defineClass (GenericClassLoader.java:328) –

0

NoClassDefFoundError는 런타임 중에 클래스를 사용할 수 없음을 나타냅니다. 클래스 경로에 있는지 확인하거나 static initializer (있는 경우)가 손상되지 않았는지 확인하십시오. 나중에, stacktrace 아래에 ExceptionInInitializerError가 보일 것입니다.

jdk 버전의 중요 여부는 확실하지 않습니다.

0

I am getting noclassdeffounderror after deploying the jar with changes to a certain class file.

코드가 의존 클래스 파일이있는 경우이 발생하고,이 컴파일시에 존재하지만 런타임 (see this answer)에서 찾을 수 없습니다.

While deploying i Just dragged the .class file from the eclipse work space into a pre existing jar file. does that matter?

예. 중요합니다. 올바른 패키지 폴더에 클래스 파일을 다시 넣으십시오. 예를 들어 패키지 com.foo의 클래스는 jar 파일 내의 com/foo 폴더에 있어야합니다. 변경된 버전을 jar 파일로 드래그했을 때 다른 버전으로 옮길 수 있습니다.

Does the jdk version in which the jar file is compiled matter because i am running on jre 1.7 in eclipse but my deployment environment is of jre 1.6 ?

jar 파일 자체는 압축 파일, 그래서 아니, 당신이 jar 파일의 내용을 압축하는 데 사용 된 자바의 버전 중요하지 않습니다.

그러나 기존의 jar 파일에서 하나의 클래스를 다시 컴파일 한 경우 으로 jar 파일의 다른 클래스를 컴파일하는 데 사용 된 Java 버전과 관계가 있습니다. 동반자 수업과 양립 할 수 없다.

+0

그러나 weblogic을 사용하여 하나의 서버에 동일한 jar를 배포했습니다. 12c 구성이 제대로 작동했습니다. 하지만 weblogic 11g을 사용하여 배포하면이 사실을 알게됩니다. 그리고 패키지에 관한 한 그것은 당신이 묘사 한 것과 같은 방식입니다. 마지막으로, 예를 들어 배포 환경의 정확한 클래스 경로로 해당 클래스 만 다시 컴파일했습니다. –

+1

JDK6을 사용하여 하나의 클래스를 컴파일 해보십시오. – gknicker

관련 문제