解决jar引用冲突问题

经常会用到导入很多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.这样依赖问题就可以解决了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值