`
json20080301
  • 浏览: 166206 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

检测JAR包JDK编译版本是否1.5

阅读更多
所在项目的jdk版本是jdk1.5,而开源框架很多都升级到了1.6的版本,为了测试开源框架与现有jdk的兼容性,分享代码如下:







   
package org.myframework.jdbc;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
//The first 4 bytes are a magic number, 0xCAFEBABe, to identify a valid class file then the next 2 bytes identify the class format version (major and minor). 
//Possible major/minor value : 
//create table m2_lib ( library1 varchar2(100)) ;
//select '"'||replace(library1,'\','/')||'",' from m2_lib   ;
//
//select * from    m2_lib  for update;
//major  minor Java platform version 
//45       3           1.0
//45       3           1.1
//46       0           1.2
//47       0           1.3
//48       0           1.4
//49       0           1.5
//50       0           1.6
public class ClassVersionChecker {
 public static void main(String[] args) throws IOException {
  // for (int i = 0; i < args.length; i++)
  // checkClassVersion(args[i]);
  String[] jarsStrings = {
         "C:/Users/wanghui/.m2/repository/net/sf/ehcache/ehcache-core/2.4.8/ehcache-core-2.4.8.jar" 
 };
  for (int i = 0; i < jarsStrings.length; i++)
   scanJarFileJDK1_5_Version(jarsStrings[i]);
 }
 private static void checkClassVersion(String filename) throws IOException {
  DataInputStream in = new DataInputStream(new FileInputStream(filename));
  int magic = in.readInt();
  if (magic != 0xcafebabe) {
   System.out.println(filename + " is not a valid class!");
   ;
  }
  int minor = in.readUnsignedShort();
  int major = in.readUnsignedShort();
  System.out.println(filename + ": " + major + " . " + minor);
  in.close();
 }
 private static void checkClassVersion(InputStream in1) throws IOException {
  DataInputStream in = new DataInputStream(in1);
  int magic = in.readInt();
  if (magic != 0xcafebabe) {
   System.out.println(in + " is not a valid class!");
   ;
  }
  int minor = in.readUnsignedShort();
  int major = in.readUnsignedShort();
  
  System.out.println(": " + major + " . " + minor);
  in.close();
 }
 
 private static void checkClassJDK1_5_Version(String jar,InputStream in1) throws IOException {
  DataInputStream in = new DataInputStream(in1);
  int magic = in.readInt();
  if (magic != 0xcafebabe) {
   System.out.println(in + " is not a valid class!");
   ;
  }
  int minor = in.readUnsignedShort();
  int major = in.readUnsignedShort();
  if (major >49)
  System.out.println(jar+": " + major + " . " + minor);
  in.close();
 }
 
 
 public static void scanJarFileJDK1_5_Version(String zipname) {
  try {
   ZipInputStream zin = new ZipInputStream(
     new FileInputStream(zipname));
   ZipEntry entry;
   while ((entry = zin.getNextEntry()) != null) {
    if (entry.getName().endsWith(".class")) {
     ZipFile file = new ZipFile(zipname);
     InputStream in = file.getInputStream(entry);
     checkClassJDK1_5_Version(zipname,in);
     break;
    }
   }
   zin.close();
  } catch (IOException e) {
  }
 }
 
 public static void scanZipFile(String zipname) {
  try {
   ZipInputStream zin = new ZipInputStream(
     new FileInputStream(zipname));
   ZipEntry entry;
   while ((entry = zin.getNextEntry()) != null) {
    System.out.println(entry.getName());
    zin.closeEntry();
   }
   zin.close();
  } catch (IOException e) {
  }
 }
 public static void scanClassFile(String zipname) {
  try {
   ZipInputStream zin = new ZipInputStream(
     new FileInputStream(zipname));
   ZipEntry entry;
   while ((entry = zin.getNextEntry()) != null) {
    if (entry.getName().endsWith(".class")) {
     System.out.println(entry.getName());
     ZipFile file = new ZipFile(zipname);
     InputStream in = file.getInputStream(entry);
     System.out.println(in);
     checkClassVersion(in);
     break;
    }
   }
   zin.close();
  } catch (IOException e) {
  }
 }
 public static void loadZipFile(String zipname, String name) {
  try {
   ZipInputStream zin = new ZipInputStream(
     new FileInputStream(zipname));
   ZipEntry entry;
   System.out.println("");
   while ((entry = zin.getNextEntry()) != null) {
    if (entry.getName().equals(name)) {
     BufferedReader in = new BufferedReader(
       new InputStreamReader(zin));
     String s;
     while ((s = in.readLine()) != null)
      System.out.println(s + "/n");
    }
    zin.closeEntry();
   }
   zin.close();
  } catch (IOException e) {
  }
 }
}
 

2
1
分享到:
评论
1 楼 leo569 2016-08-04  
很少评论。但楼主分享出的就是我需要的!32个赞!
Unsupported major.minor version 51.0 这类错误很难定位错误位置!只好大量查jar包。如果有朋友有办法定位错误,请告知。非常感谢

相关推荐

    将1.5版本编译的jar包降级转编译为1.4版本的jar包

    在这种情况下,将1.5版本编译的jar包降级转编译为1.4版本的jar包是一个必要的步骤。下面将详细阐述如何进行这个过程。 首先,我们需要了解Java版本之间的差异。Java 1.5(也称为Java 5.0)引入了许多重要的语言特性...

    jdk1.5环境下编译的jar包在JDK1.4环境下运行

    在Java开发过程中,时常会遇到跨版本的问题,尤其是在旧版JDK环境中运行新版JDK编译的代码。这里我们讨论的焦点是“JDK1.5环境下编译的jar包在JDK1.4环境下运行”所遇到的问题,具体表现为“Unsupported major.minor...

    简单易用通用(xls,xlsx)导入导出操作 jdk1.5+

    前几天上传过这个资源,因为是在jdk1.6上开发的, 测试了一下在jdk1.5上不能用, 今天重新用jdk1.5编译了一下, 这个是可以支持jdk1.5+的 将 pu-xlscommon-1.0.0.jar 添加到工程的 /lib 目录下 用法在附件中 XlsTest....

    解决jdk1.4生成二维码问题,因为现下生成二维码的jar包,版本最低支持jdk1.5以上的版本,老的项目中想使用二维码,直接使用jar包无法使用

    2.1 下载第三方QRCode.jar包和现有案例,先验证在jdk高版本是否可以正常使用 2.2 下载jd-gui反编译工具,保存源码 3.3 把源码和现有案例放到一个工程下,jdk修改为jdk1.4后报错,逐步修改错误,错误修复后,生成...

    openCV的jar包,opencv4.8.0源码下进行编译的

    此版本是基于jdk1.8进行编译。可在相应的环境下运行。 opencv4.8.0人脸识别的类库,在windows 10 下 vs2022的cmaker编译。原生的opencv4.8.0是基于jdk11编译的。此版本是基于jdk1.8进行编译。可在相应的环境下运行。...

    java项目jar包与jdk的版本不兼容的问题解决

    当一个使用了更高版本JDK编译的jar包在低版本JDK环境下运行时,就会出现“Unsupported major.minor version”错误,这是因为低版本JDK无法识别新版本的字节码格式。 例如,在给定的描述中提到的错误“Unsupported ...

    自己重新编译的jdk源码jar包

    我们要明白在jdk中,sun对rt.jar中的类编译时,去除了调试信息,这样在eclipse中就不能看到局部变量的值。这样的话,如果在debug的时候查看局部变量, 就必须自己编译相应的源码使之拥有调试信息。要达到这个目的,一是...

    java-jdk11版本jar包下载

    Java JDK 11是Oracle公司推出的Java开发工具包的一个重要版本,它包含了Java运行环境(JRE)和用于编译、调试以及管理Java应用程序的工具。JDK 11的发布标志着Java进入了一个新的时代,因为它是Java SE 11(也称为...

    nutz-1.r.57的JDK1.5编译

    "nutz-1.r.57-jdk1.5-source.jar"则是编译后的源码包,它提供了修改后的源代码,方便开发者查看和理解针对JDK1.5所做的改动。这对于维护和调试是非常有帮助的,因为可以直接查看源代码,找出可能导致问题的特定修改...

    jdk源码调试重编译rt.jar包

    关于调试jdk源码显示源码变量值的rt.jar重编译包

    jdk1.7版本jar包下载

    - **多版本JAR支持**:Java 7引入了`--module-path`和`--add-modules`选项,允许在同一个项目中使用不同版本的JAR文件,提高了兼容性。 - **字符串in switch语句**:现在可以直接在switch语句中使用字符串,使得...

    Jar包反编译工具

    描述中提到,这款反编译工具支持JDK 7及以下版本的.jar包。这是因为在Java 7及之前的版本,字节码和语言特性相对简单,反编译的结果通常较为准确。然而,对于JDK 8及以上版本,特别是包含Lambda表达式的.jar包,反...

    zxing jar包,支持jdk1.6,包括源码

    这个jar包特别针对JDK1.6进行了优化和适配,确保在该版本的Java环境中能够正常运行。ZXing库广泛应用于移动设备和服务器端,允许程序生成和读取多种类型的条形码和二维码,如QR Code、Aztec、Code 39、EAN-13等。 1...

    Java调用IReport5.6需要的jar包,JDK1.7可用

    确保所有依赖的jar包都在类路径中,并且JDK版本与IReport支持的版本相匹配,才能成功运行报表生成任务。 总之,Java调用IReport 5.6进行报表生成涉及到一系列的jar包依赖,包括JasperReports、IReport Designer、...

    编译tomcat源码所需jar包

    本文将深入探讨“编译Tomcat源码所需jar包”这一主题,帮助开发者了解如何从源码构建Tomcat,以及在这个过程中需要用到的关键jar包。 首先,我们来了解一下为什么要从源码编译Tomcat。直接下载预编译的二进制版本...

    jdk1.5专用包

    JDK 1.5,也被称为Java SE 5.0,是Java历史上的一个重要版本,发布于2004年9月30日。这个版本引入了许多新特性,显著提升了开发效率和代码质量。 1. **泛型(Generics)** 泛型是JDK 1.5中的关键特性之一,它允许...

    IBMJDK1.5linux.zip

    IBM JDK 1.5 for Linux 64位是一款专为Linux操作系统设计的Java开发工具包,由IBM公司提供。此版本的JDK是基于Java Development Kit(JDK)1.5,也称为Java 5.0,它在Java平台标准版(Java SE)的历史上是一个重要的...

    org.json-jdk1.5版

    org.json-jdk1.5版 ...使用org.json最新源码,重新利用jdk1.5 进行了编译,不包含zip包。请注意查阅。(网上流行的org.json-20090211.jar是使用jdk1.6编写的) 注意:此包和net.sf.json-lib.jar用法不同。

    JDK转换器(1.5-->1.4)

    这个“JDK转换器(1.5--&gt;1.4)”工具对于那些需要在旧版本JRE上运行的项目非常有用,它能够帮助开发者解决由于版本不兼容带来的问题,使得代码能在较旧的Java环境中顺利执行。使用这个转换器时,开发者需要注意转换...

    JAVA帮助文档全系列_JDK1.5_、JDK1.6、_JDK1.7_官方中英完整版下载

    本文档不仅覆盖了JDK 1.5至1.7三个版本的下载信息,还对JDK的基本构成进行了详细介绍,并提供了官方中文和英文的帮助文档资源,以便于开发者更好地理解和使用Java技术栈。 #### JDK简介 JDK(Java Development Kit...

Global site tag (gtag.js) - Google Analytics