检测多个Jar包冲突的class

来源:互联网 发布:上海锐战网络 编辑:程序博客网 时间:2024/06/05 05:58

思路

为了提前找到存在相同classjar包,我准备写一个小程序,由于是操作jar包等,需要用Java代码来处理,但写出来一般是一个class文件,使用者可能需要用命令行执行的方式来调用它,java的桌面程序我不擅长,于是想到了用.NET开发一个工具壳子,内部调用java代码的方式来执行,开始想到用.NET下的IKVM来处理jar包,它提供了java基础包的.NET实现。但加载它也会使程序增大几M。最后我换了个思路,代码由Java来编写,.NETjava命令的方式执行java编写的class文件,再把输出内容展现到.NET工具的界面上,这样也会大大减小工具的大小。


CheckLib.java

/** * Created by Administrator on 2014/10/10. */import java.io.*;import java.lang.*;import java.util.*;import java.util.jar.*;public class CheckLib {    public static void main(String args[]) throws Exception {        String libpath = "E:/karl/service/jetty-distribution-8.1.15.v20140411/webapps/ROOT/WEB-INF/lib";        if(args.length < 1){            System.out.println("请输入jar包路径!");        //    return ;        }        File file = new File(libpath);        Map<String,HashSet<String> > jarMap = new HashMap<String,HashSet<String>>();        if(null != file &&  file.exists() && file.isDirectory()) {            File[] jarFile = file.listFiles();            for (File f : jarFile) {                if (f.isFile() && f.getName().endsWith(".jar")) {                    try {                        JarFile jar = new JarFile(f);                        Enumeration<JarEntry> enumJar = jar.entries();                        while (enumJar.hasMoreElements()) {                            JarEntry je = enumJar.nextElement();                            if (je.getName().endsWith(".class")) {                                if (jarMap.containsKey(je.getName())) {                                    jarMap.get(je.getName()).add(f.getName());                                } else {                                    HashSet<String> set = new HashSet<String>();                                    set.add(f.getName());                                    jarMap.put(je.getName(), set);                                }                            }                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }        //查找重复类代码如下:        Iterator it = jarMap.keySet().iterator();        while(it.hasNext()){            Object obj = it.next();            if(jarMap.get(obj).size() > 1){                //存在重复                HashSet<String> hsfile = jarMap.get(obj);                String sfiles = "";                for(String sf : hsfile){                    sfiles = sfiles + sf + ",";                }                if(sfiles.length() > 1){                    sfiles = sfiles.substring(0, sfiles.length() -1);                }                System.out.println(sfiles + "有重复类:" + obj.toString());            }        }    }}

转自: http://www.cnblogs.com/Lawson/archive/2013/03/27/2984343.html


0 0
原创粉丝点击