ダウングレード

お客の要望で、WAS5で動いているアプリを3.5で動かせないかという話が来て、
その対応のため、稼働中のアプリに入っているjarがどのバージョンでコンパイルされているか調査したのですが、
その時に使ったコードを乗せておきます。
id:shot6さんに、クラスファイルのバイト見ればいいんじゃねと言われたので、jarのなかのクラスファイルの
先頭8バイトを取って、バージョンを出すコードを書いてみました。

import java.io.File;
import java.io.FileInputStream;
import java.util.jar.JarInputStream;
import java.util.zip.ZipEntry;

public class ClassVersionCheck {

  public static void main(String[] args) {
    try {
      File libdir = new File("WEB-INF/lib");
      File[] libs = libdir.listFiles();
      for (int i = 0; i < libs.length; i++) {
        if (libs[i].getName().endsWith(".jar")
            || libs[i].getName().endsWith(".zip")) {
          outputClassVersion(libs[i]);
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public static void outputClassVersion(File jar) throws Exception {
    JarInputStream in = new JarInputStream(new FileInputStream(jar));
    while (true) {
      ZipEntry entry = in.getNextEntry();
      if (entry == null)
        break;
      if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
        byte[] b = new byte[8];
        in.read(b);
        String version = b[7] + "." + b[5];
        String jdkversion = "";
        if (version.equals("45.3")) {
          jdkversion = "JDK1.1";
        } else if (version.equals("46.0")) {
          jdkversion = "JDK1.2";
        } else if (version.equals("47.0")) {
          jdkversion = "JDK1.3";
        } else if (version.equals("48.0")) {
          jdkversion = "JDK1.4";
        } else if (version.equals("49.0")) {
          jdkversion = "Java5";
        } else if (version.equals("50.0")) {
          jdkversion = "Java6";
        } else {
          System.out.println("[UNKNOWN version=" + version + "]:"
              + jar.getName() + ":" + entry.getName());
          continue;
        }
        System.out.println("[" + jdkversion + "]:" + jar.getName()
            + ":" + entry.getName());
      }
    }
    in.close();
  }
}

ちなみに調査の結果、すべてのクラスが1.1 or 1.2だったので、ほっと一安心です。