본문 바로가기

IT관련

자바 에러 - Unsupported major.minor version (oracle/jdbc/driver:OracleDriver.class)

오라클 DB에 접속하는 Java 프로그램을 컴파일 하거나, 실행할 때 Unsupported majar.minor version 에러가 발생할 수 있습니다.

 

$ javac jdbcTest_CNT.java
warning: oracle/jdbc/driver/OracleDriver.class(oracle/jdbc/driver:OracleDriver.class): major version 51 is newer than 50, the highest major version supported by this compiler.
It is recommended that the compiler be upgraded.
1 warning
$ java jdbcTest_CNT
Exception in thread "main" java.lang.UnsupportedClassVersionError: oracle/jdbc/driver/OracleDriver : Unsupported major.minor version 51.0
       at java.lang.ClassLoader.defineClass1(Native Method)
       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 java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
       at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
       at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
       at jdbcTest_CNT.main(jdbcTest_CNT.java:56)

 

원인은 Oracle JDBC 버전과 JDK 버전, Java 버전이 서로 다르기 때문입니다.

 

예를 들어,

아래와 같이 ClassPath 에는 ojdbc7.jar 파일을 사용하도록 설정해놓고,

컴파일 or 실행할 때는 Java 6 버전(1.6 버전)을 쓰게 되면 이런 에러가 발생합니다.

 

export CLASSPATH=.:$ORACLE_HOME/jdbc/lib/ojdbc7.jar
$ javac -version
javac 1.6.0_37

$ java -version
java version "1.6.0_37" Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)

 

이런 경우, JDK, Java 버전을 1.7 로 똑같이 맞춰주던가,

아니면, $ORACLE_HOME/jdbc/lib/ 디렉토리에 가보면, ojdbc6.jar 파일이 있습니다.

이걸 ClassPath 에 잡아주면 에러없이 잘 동작합니다.

 

오라클 DB버전별로 지원되는 JDBC 버전과 JDK 버전이 있습니다. 버전에 맞는 걸 정확히 확인하고 사용하는 것이 바람직합니다.