jar包冲突解决方法
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包冲突解决方法的更多相关文章
- tomcat web工程 jar包冲突解决方法
目前在部署工程时,遇到了一个问题,报错信息如下: See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet ...
- 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法
在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...
- jar包冲突排解方法(sbt)
jar包依赖冲突,版本不兼容会导致各种各样的问题.这里推荐一款sbt插件用于查找项目中的jar包依赖关系,通过该插件可以轻松的看出某个jar包依赖哪些jar,以及某个jar被哪些jar所依赖.此外该插 ...
- Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法
从SVN检出新项目,在Eclipse中报错如下: 转: Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法 2018-01-04 00:36:20 雨临Lewis ...
- xml-apis.jar getTextContent() jar包冲突解决(getTextContent()方法无法找到)
1.引用包: import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList; 2.方法中应用: ...
- Android 第三方库导致jar包冲突解决办法
这几天的任务是将mapbox的工程合到程序中去,但是合并过程却出现了问题 合并方法: 在app的build.gradle中添加 dependencies { compile ('com.mapbox. ...
- 曹工杂谈:一例简单的Jar包冲突解决示例
Jar包冲突的相关文章: 了不得,我可能发现了Jar 包冲突的秘密 一.前言 jar包冲突分多种,简单理解来说,就是同package且同名的类在多个jar包内出现,如果两个jar包在同一个clas ...
- jar包冲突解决
背景: 新需求需要引入新jar包,引入后发现本地启动没有报错,发到测试环境提示某个bean无法创建,nested exception is java.lang.VerifyError: Bad typ ...
- java 包冲突解决方法
1.诊断包冲突 java.lang.NoSuchMethodError: org.apache.commons.io.output.DeferredFileOutputStream.<init& ...
随机推荐
- 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)
#把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...
- 第二百六十六天 how can I 坚持
有些小郁闷,上班没事干,技术.要买房,还要结婚,买了房哪还有彩礼钱,还得借钱,愁人. 该咋办,毕梦琪. 哎.今天还和程秀通说好的去看房呢,整天犹豫不定的.烦. 今天平安夜啊.吃了个苹果,一生平平安安, ...
- Oracle 递归查询
现实中我们经常需要用到一些递归查询,下面我们来介绍下ORACLE中递归查询的使用. 首先我们先新建一个表来存储以上信息 create table FAMILY ( person_id INTEGER, ...
- 【转】有向图强连通分量的Tarjan算法
原文地址:https://www.byvoid.com/blog/scc-tarjan/ [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly con ...
- CodeForces 560B Gerald is into Art
Gerald is into Art time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- BNU 51276 - 道路修建 Small (并查集)
题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=51276 具体题意不描述了,一眼看过去就是并查集,关键是添加边以后更新答案.我是开个二维的数组an ...
- static关键字修饰类
今天继续研究公司的新项目,据说是京东的架构,研究看了一番,果然很牛逼,大致是Maven+spingmvc+spring+mybatis+ehcache+velocity来搭建的,数据库用的是mysql ...
- 用Eclipse来开发STM32
先贴一个官方说明文档:http://www.keil.com/support/man/docs/ecluv/default.htm
- Java模拟登录系统抓取内容【转载】
没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下.... 为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...
- Chronometer控件实现的Android计时器
本文为大家演示了如何使用Chronometer控件实现Android计时器的实例. 先贴上最终的实现效果图: Android计时器实现思路 使用Chronometer控件实现计器的操作.通过设置set ...