识别jar的编译JDK版本
解压jar,获取xxx.calss文件
dos命令行javap -verbose classname
import java.io.InputStream;
import java.io.PrintWriter; public class CMD命令 {
public static void main(String[] args) {
String filePath = "D:/git/new_baiwang/sdk-java/sdk-java/target/classes/com/baiwang/bop/Constants.class";
docmd(filePath);
} static void docmd(String filePath) {
String[] command = { "cmd", };
Process p = null;
try {
p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getInputStream())).start();
new Thread(new SyncPipe(p.getErrorStream())).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
String ml = "javap -verbose " + filePath;
stdin.println(ml);
stdin.close();
} catch (Exception e) {
throw new RuntimeException("编译出现错误:" + e.getMessage());
}
}
} class SyncPipe implements Runnable { private final InputStream istrm_; public SyncPipe(InputStream istrm) {
istrm_ = istrm;
} public void run() {
try {
final byte[] buffer = new byte[10240];
StringBuffer sbf = new StringBuffer();
for (int length = 0; (length = istrm_.read(buffer)) != -1;) {
sbf.append(new String(buffer, 0, length));
}
String msg = sbf.toString();
if (msg.length() > 10) {
if (msg.contains("major version: 50")) {
System.out.println("编译的JDK版本是1.6");
} else if (msg.contains("major version: 51")) {
System.out.println("编译的JDK版本是1.7");
} else if (msg.contains("major version: 52")) {
System.out.println("编译的JDK版本是1.8");
} else {
System.err.println("运行错误,未知版本!");
System.out.println(msg);
} } else {
System.err.println("运行错误,没有想要的信息!");
}
} catch (Exception e) {
throw new RuntimeException("处理命令出现错误:" + e.getMessage());
}
}
}
识别jar的编译JDK版本的更多相关文章
- jar包、jdk版本、兼容性
对jar包.jdk版本,以及不同jdk版本的jar包的兼容性有一些疑问,搜集一些资料于此 查看jar包的jdk版本 查看.jar包中的META-INF\MANIFEST.MF Build-Jdk: 1 ...
- 查看jar包的jdk版本并降级
用解压工具打开jar包(例子都是用7zip) 进入到META-INF目录,查看MANIFEST.MF文件,查看Bulid-Jdk,下图就为1.7.0_55版本的JDK,这就表示jetty-serv ...
- Java9系列第三篇-同一个Jar支持多JDK版本运行
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- 查看编译后的calss文件编译jdk版本
使用UtralEdit或者sublime text打开编译后的.class文件, 其中cafe babe为magic number(魔数),标识这个文件是java的class文件. 0033转换成10 ...
- Eclipse项目修改编译jdk版本(Failed to read candidate component class: file 处理)
转: Failed to read candidate component class: file 处理 2018年03月09日 07:15:54 爱萨萨 阅读数 10041 出错现象: org. ...
- 查看jar包的jdk版本
- 到底如何配置 maven 编译插件的 JDK 版本
千言万语不及官方文档,详情请阅读 compiler:compile 文档 配置 maven 编译插件的 JDK 版本 maven 编译插件(maven-compiler-plugin)有默认编译 JD ...
- 兼容性测试中如何切换和管理多个JDK版本
本文由作者邹珍珍授权网易云社区发布. 一.测试背景: 项目对外提供JAR包,需要测试该JAR包对不同JDK版本(1.6至1.9版本)的兼容性.下面主要介绍在兼容性测试中,JDK多版本共存时如何配置环境 ...
- jdk版本对应数字
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springfr ...
随机推荐
- Java学习笔记(1)-(GridBagLayout)网格袋布局
学习JAVA-布局管理的时候,在书上看到了这么一段话:GridBagLayout的功能非常强大,使用是也比较复杂,考虑到一般的读者很少会使用到这种管理,这里不做介绍.然书本就跳过了,为什么功能强大却很 ...
- python基础——4(数字、字符串、列表类型的内置方法介绍)
目录 一.可变与不可变类型 二.数字类型 三.字符串类型 四.列表类型 一.可变与不可变类型 可变类型:值改变,但是id不变,证明就是在改变原值,是可变类型 不可变类型:值改变,id也跟着改变,证明产 ...
- 单机安装hadoop集群
一 .安装前准备 1.VMware虚拟内容 2.Linux系统 (CentOS-6.9-min) 镜像文件http://vault.centos.org/ 3.jdk 1.8 rpm或bin文件 ht ...
- Android开发——流量统计
1. 获取应用UID 在设备的proc目录下我们可以看到一些比较熟悉的目录/文件,比如data,system,cpuinfo(获取CPU信息)等,其中uid_stat的各个以应用Uid命名的目录下,便 ...
- scrapy_redis使用介绍
scrapy_redis是一个基于redis的scrapy组件,通过它可以快速实现简单的分布式爬虫程序,该组件主要提供三大功能: (1)dupefilter——URL去重规则(被调度器使用) (2)s ...
- Archiving not possible: No primary destinations errors
If space ran out in an archive destination, after you fix the problem, you may still recieve the fol ...
- POJ3321Apple Tree【dfs 树状数组】
题目大意:一棵树(不一定是二叉树!!),树的节点上本来都有一个苹果,要求完成以下操作: 1.指定某个节点,如果这个节点原本有苹果则拿去,如果没有苹果则填上一个苹果 2.询问某个节点以及其子树一共有多少 ...
- 【模拟】2017 Multi-University Training Contest 1 The Battle of Chibi
acm.hdu.edu.cn/showproblem.php?pid=5542 [Accepted] #include<iostream> #include<cstdio> # ...
- python学习之 - configparser模块
configparser模块功能:用于生成和修改常见配置文件.基本常用方法如下: read(filename):直接读取配置文件write(filename):将修改后的配置文件写入文件中.defau ...
- FIREDAC保存ORACLE的BLOB字段数据
FIREDAC默认识别ORACLE的BLOB字段为HUGEBLOB,需要将HBLOB映射为BLOB,才可以保存ORACLE的BLOB字段的数据.