import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class ClearConflict
{
    
    List<ClassJarPair> classList = new ArrayList<ClassJarPair>();
    
    List<String> jarList = new ArrayList<String>();
    
    /**
     * 生成输出格式
     *
     * @param name 输出的文件名或目录名
     * @param level 输出的文件名或者目录名所在的层次
     * @return 输出的字符串
     */
    public String createPrintStr(String name, int level)
    {
        // 输出的前缀
        String printStr = "";
        // 按层次进行缩进
        for (int i = 0; i < level; i++)
        {
            printStr = printStr + "  ";
        }
        printStr = printStr + "- " + name;
        return printStr;
    }
    
    /**
     * 输出初始给定的目录
     *
     * @param dirPath 给定的目录
     */
    public void printDir(String dirPath)
    {
        // 将给定的目录进行分割
        String[] dirNameList = dirPath.split("\\\\");
        // 按格式输出
        for (int i = 0; i < dirNameList.length; i++)
        {
            System.out.println(createPrintStr(dirNameList[i], i));
        }
    }
    
    /**
     * 输出给定目录下的文件,包括子目录中的文件
     *
     * @param dirPath 给定的目录
     */
    public void readFile(String dirPath)
    {
        // 建立当前目录中文件的File对象
        File file = new File(dirPath);
        // 取得代表目录中所有文件的File对象数组
        File[] list = file.listFiles();
        // 遍历file数组
        for (int i = 0; i < list.length; i++)
        {
            if (list[i].isDirectory())
            {
                // 递归子目录
                readFile(list[i].getPath());
            }
            else
            {
                if (list[i].isFile())
                {
                    try
                    {
                        if ((list[i].getCanonicalFile() + "").endsWith(".jar"))
                        {
                            // System.out.println(list[i].getCanonicalFile()+"");
                            JarFile jar = new JarFile(list[i].getCanonicalFile() + "");
                            Enumeration<JarEntry> entrys = jar.entries();
                            while (entrys.hasMoreElements())
                            {
                                JarEntry jarEntry = entrys.nextElement();
                                if (jarEntry.getName().endsWith("class"))
                                {
                                    int index =
                                        classList.indexOf(new ClassJarPair(list[i].getCanonicalFile() + "",
                                            jarEntry.getName() + ""));
                                    if (0 < index)
                                    {
                                        String jar1 = list[i].getCanonicalFile() + "";
                                        String jar2 = classList.get(index).getJarName();
                                        if (jarList.contains(list[i].getCanonicalFile() + ""))
                                        {
                                            ;
                                        }
                                        else
                                        {
                                            System.out.printf("%20s CONFILT WITH JAR: %20s",
                                                jar2.substring(jar2.lastIndexOf("\\") + 1),
                                                jar1.substring(jar1.lastIndexOf("\\") + 1));
                                            jarList.add(list[i].getCanonicalFile() + "");
                                            System.out.print();
                                        }
                                        /*
                                         * System.out.print("the jar: "+list[i].getCanonicalFile()+" confilt with Jar: "
                                         * + classList.get(index).getJarName());
                                         * System.out.println("has the same class: "+jarEntry.getName());
                                         */
                                    }
                                    else
                                    {
                                        classList.add(new ClassJarPair(list[i].getCanonicalFile() + "",
                                            jarEntry.getName() + ""));
                                    }
                                }
                                
                            }
                        }
                        
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args)
        throws IOException
    {
        File dir = null;
        if (0 == args.length)
        {
            dir = new File("");
        }
        else if (1 == args.length)
        {
            dir = new File(args[0]);
        }
        else
        {
            System.out.println("Usage: java ClearConflict libpath");
        }
        System.out.println(dir.getAbsoluteFile());
        ClearConflict cl = new ClearConflict();
        String dirPath = dir.getAbsoluteFile() + "";
        cl.readFile(dirPath);
    }
    
    class ClassJarPair
    {
        private String jarName;
        
        private String className;
        
        ClassJarPair(String jarName, String className)
        {
            this.jarName = jarName;
            this.className = className;
        }
        
        @Override
        public boolean equals(Object obj)
        {
            ClassJarPair classJarPair = (ClassJarPair)obj;
            return className.equals(classJarPair.getClassName());
        }
        
        public String getJarName()
        {
            return jarName;
        }
        
        public void setJarName(String jarName)
        {
            this.jarName = jarName;
        }
        
        public String getClassName()
        {
            return className;
        }
        
        public void setClassName(String className)
        {
            this.className = className;
        }
        
    }
}

jar包冲突解决方法的更多相关文章

  1. tomcat web工程 jar包冲突解决方法

    目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...

  2. 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法

    在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...

  3. jar包冲突排解方法(sbt)

    jar包依赖冲突,版本不兼容会导致各种各样的问题.这里推荐一款sbt插件用于查找项目中的jar包依赖关系,通过该插件可以轻松的看出某个jar包依赖哪些jar,以及某个jar被哪些jar所依赖.此外该插 ...

  4. Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法

    从SVN检出新项目,在Eclipse中报错如下: 转: Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法 2018-01-04 00:36:20 雨临Lewis ...

  5. xml-apis.jar getTextContent() jar包冲突解决(getTextContent()方法无法找到)

    1.引用包: import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList; 2.方法中应用: ...

  6. Android 第三方库导致jar包冲突解决办法

    这几天的任务是将mapbox的工程合到程序中去,但是合并过程却出现了问题 合并方法: 在app的build.gradle中添加 dependencies { compile ('com.mapbox. ...

  7. 曹工杂谈:一例简单的Jar包冲突解决示例

    Jar包冲突的相关文章: 了不得,我可能发现了Jar 包冲突的秘密   一.前言 jar包冲突分多种,简单理解来说,就是同package且同名的类在多个jar包内出现,如果两个jar包在同一个clas ...

  8. jar包冲突解决

    背景: 新需求需要引入新jar包,引入后发现本地启动没有报错,发到测试环境提示某个bean无法创建,nested exception is java.lang.VerifyError: Bad typ ...

  9. java 包冲突解决方法

    1.诊断包冲突 java.lang.NoSuchMethodError: org.apache.commons.io.output.DeferredFileOutputStream.<init& ...

随机推荐

  1. android 拍照或者图库选择 压缩后 图片 上传

    通过拍照或者从相册里选择图片通过压缩并上传时很多应用的常用功能,记录一下实现过程 一:创建个临时文件夹用于保存压缩后需要上传的图片 /** * path:存放图片目录路径 */ private Str ...

  2. Native libraries .so.XY failing to link at runtime

    What you need to do is edit the configure file. And find out this: SLIBNAME='$(SLIBPREF)$(FULLNAME)$ ...

  3. Gym 100507C Zhenya moves from parents (线段树)

    Zhenya moves from parents 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/C Description Z ...

  4. [iOS 多线程 & 网络 - 3.0] - 在线动画Demo

    A.需求 所有数据都从服务器下载 动画列表包含:图片.动画名标题.时长副标题 点击打开动画观看   code source: https://github.com/hellovoidworld/Vid ...

  5. jQuery基础学习5——JavaScript方法获取页面中的元素

    给网页中的所有<p>元素添加onclick事件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  6. UVaLive 7363 A Rational Sequence (二叉树)

    题意:给定一个二叉树,并对每一个进行编号和规定,现在给你一个值,问你是第几个. 析:这个题,我想了好久才想出来,这个真是数据结构练的太差了,不够扎实,这个题,应该从下向上推,如果分子大于分母,那么这个 ...

  7. 【BJG吐槽汇】第一期 - 警惕亚马逊莫名自动扣款!千万不要进了它的坑!

    BJG吐槽汇:一直以来我都觉得其实生活中工作中会有各种各样奇葩的事或者奇葩的人可以去吐槽,那么BeJavaGod本身聊得就是关于JavaWeb技术,互联网技术,互联网产品等,那么今天起咱们开了这么一档 ...

  8. Lua学习笔记(五):面向对象的实现

    Lua本身是没有class之类的关键字的,但是我们可以巧妙利用function也是值和table的特性来实现面向对象的特性. 通过复制表的实现 Lua中的类也是一个table对象,下面我们看看一个简单 ...

  9. Volley使用指南第四回(来自developer.android)

    Volley网络请求的第四篇,废话不多说,开始. 这一篇文章将会教你怎样在Volley支持的范围内定制一个请求. 第一步:写一个通用请求: 大多数请求都有已经写好的接口供你调用,如果你的请求是Stri ...

  10. VMware虚拟机扩容

    作者:金良(golden1314521@gmail.com) csdn博客:http://blog.csdn.net/u012176591 用了一段Linux虚拟机.发现安装虚拟机时分配的空间不够用, ...