您的位置:首页 > 编程语言 > Java开发

解决jar引用冲突问题

2013-11-21 15:01 429 查看
经常会用到导入很多jar的情况,很多时候会因为jar的冲突而调很久很久,。

网上有一个比较不错的类,可以解决这个问题,我贴出来大加可以研究一下:

package test;
import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarSearcherUtil {

private File[] jarFileArray;
HashMap<String, Object[]> hash = new HashMap<String, Object[]>();

private JarSearcherUtil() {

}
public JarSearcherUtil(File[] jarFileArray) {
this.jarFileArray = jarFileArray;
}

public void searchClassFileName() {
JarFile jarFile = null;
try {
for (int i = 0; i < jarFileArray.length; i++) {
try {
jarFile = new JarFile(jarFileArray[i]);
searchClassFileNameToMap(jarFile);
} catch (Exception e) {
e.printStackTrace();
} finally {
jarFile.close();
}
}
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
private void searchClassFileNameToMap(JarFile jarFile) {
Enumeration<JarEntry> enumJar = jarFile.entries();
String matchFileName, tmpStr;
while (enumJar.hasMoreElements()) {
matchFileName = String.valueOf(enumJar.nextElement());
if (matchFileName.endsWith(".class")) {
tmpStr = matchFileName.replace('/', '.');
tmpStr = tmpStr.substring(0, tmpStr.length() - ".class".length());

Object[] obj = hash.get(tmpStr);
if (obj == null) {
ArrayList<String> lst = new ArrayList<String>();
lst.add(jarFile.getName());
hash.put(tmpStr, new Object[] { new Integer(1), lst });
} else {
ArrayList<String> lst = (ArrayList<String>) obj[1];
lst.add(jarFile.getName());
hash.put(tmpStr, new Object[] { new Integer((Integer) obj[0] + 1), lst });
}
}

}
}

public String getSearchResult() {
StringBuilder str = new StringBuilder();
Object[] key = (Object[]) hash.keySet().toArray();
for (int i = 0; i < key.length; i++) {
Object[] obj = hash.get(key[i].toString());
if ((Integer) obj[0] > 1) {
str.append(key[i].toString());
str.append("\r\n");
ArrayList<String> lst = (ArrayList<String>) obj[1];
for (Iterator iterator = lst.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
str.append(string);
str.append("\r\n");
}
str.append("--------------------------");
}
}
return str.toString();
}

public static void main(String[] args) {
File file=new File("D:\\libs\\");
File[] myjars = file.listFiles();
// for (File file2 : myjars) {
// System.out.println(file2.getName());
// }

JarSearcherUtil jsu = new JarSearcherUtil(myjars);
jsu.searchClassFileName();
String relt = jsu.getSearchResult();
System.out.println(relt);
}

}

但是,虽然后这种办法,可以解决一些jar冲突问题,但这个并不是一定的,最好使用maven来构建项目。,因为spring也再提倡大家使用maven来下载jar.这样依赖问题就可以解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java