1. 程式人生 > >Unsupported major.minor version 51.0和52.0錯誤解決

Unsupported major.minor version 51.0和52.0錯誤解決

現象:有時執行Java程式時,會報版本不支援的異常,類似如下:

  1. java.lang.UnsupportedClassVersionError: org/apache/activemq/ActiveMQConnectionFactory :   
  2. Unsupported major.minor version 51.0
  3.     at java.lang.ClassLoader.defineClass1(Native Method)  
  4.     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)  
  5.     at java.lang.ClassLoader.defineClass(ClassLoader.java:615
    )    
  6.     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)  
  7.     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)  
  8.     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)  
  9.     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)  
  10.     at java.security.AccessController.doPrivileged(Native Method)  
  11.     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)  
  12.     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)  
  13.     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
  14.     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)  
以上錯誤是因為,我使用了ActiveMQ-all-5.13.2.jar包,該jar包採用JDK1.7編譯,從jar包的MANIFEST.MF檔案中可以看出採用哪一版本編譯,而我執行時採用JDK1.6,因此出錯:

Manifest-Version: 1.0
Implementation-Vendor: The Apache Software Foundation
Implementation-Title: ActiveMQ :: All JAR bundle
Implementation-Version: 5.9.1
Implementation-Vendor-Id: org.apache.activemq
Built-By: hadrian
Build-Jdk: 1.7.0_51
Specification-Vendor: The Apache Software Foundation
Specification-Title: ActiveMQ :: All JAR bundle
Created-By: Apache Maven 3.0.5
Specification-Version: 5.9.1
Archiver-Version: Plexus Archiver

原因:JDK版本不相容。執行的Java Class檔案採用高版本的JDK編譯,然後在低版本的JRE環境中執行,有時會報此錯誤。

解決:升級JDK,或調整Eclipse中Java Compiler到1.7,或降低jar包版本到1.6編譯的版本。