1

私のプロジェクトでは、40 から 50 個の jar ファイルが利用可能です。各 jar の最新バージョンを毎回見つけるのに多くの時間がかかります。このためのJavaプログラムを書くのを手伝ってくれる人はいますか?

4

2 に答える 2

3

maven のみを使用することもできます: http://maven.apache.org/ または、Ivy などの他の依存関係マネージャー。

于 2012-12-04T12:23:38.513 に答える
1
At the time of ant-build please call this method
public void ExpungeDuplicates(String filePath) {
    Map<String,Integer> replaceJarsMap = null;
    File folder = null;
    File[] listOfFiles = null;
    List<String> jarList = new ArrayList<String>();
    String files = "";
    File deleteFile = null;
    Iterator<String> mapItr = null;
    //String extension ="jar";
    try {
            folder = new File(filePath);
        listOfFiles = folder.listFiles();
        for (int i = 0; i < listOfFiles.length; i++) {
            if (listOfFiles[i].isFile()) {
                files = listOfFiles[i].getName();
                jarList.add(files);
            }
        }
        if (jarList.size() > 0) {
            replaceJarsMap = PatternClassifier.findDuplicatesOrLowerVersion(jarList);  
            System.err.println("Duplicate / Lower Version - Total Count : "+replaceJarsMap.size());
            mapItr = replaceJarsMap.keySet().iterator();
            while (mapItr.hasNext()) {
                String key = mapItr.next();
                int repeat = replaceJarsMap.get(key);
                System.out.println( key +" : "+repeat);
                for (int i = 0; i <repeat; i++) {
                    deleteFile = new File(filePath + System.getProperty ("file.separator")+key);
                    try{
                    if (deleteFile != null && deleteFile.exists()){
                        if(deleteFile.delete()){
                            System.err.println(key +" deleted");
                        }
                    }
                    }catch (Exception e) {
                    }
                }
            }
        }

} catch (Exception e) {
    // TODO: handle exception
}
}

この関数に Lib のパスを指定するだけで済みます。このメソッドは、ファイルのすべての重複または下位バージョンを検出します。そして、重要な機能を以下に示します...提供したファイルのリストから重複を見つけます。

public static Map<String,Integer> findDuplicatesOrLowerVersion(List<String> fileNameList) {
    List<String> oldJarList = new ArrayList<String>();
    String cmprTemp[] = null;
    boolean match = false;
    String regex = "",regexFileType = "",verInfo1 = "",verInfo2 = "",compareName = "",tempCompareName = "",tempJarName ="";
    Map<String,Integer> duplicateEntryMap = new HashMap<String, Integer>();
    int count = 0;
    Collections.sort(fileNameList, Collections.reverseOrder());
    try{
        int size = fileNameList.size();
        for(int i = 0;i<size;i++){
            cmprTemp = fileNameList.get(i).split("[0-9\\._]*");
            for(String s : cmprTemp){
                compareName += s;
            }
            regex = "^"+compareName+"[ajr0-9_\\-\\.]*";
            regexFileType = "[0-9a-zA-Z\\-\\._]*\\.jar$"; 
            if( fileNameList.get(i).matches(regexFileType) && !oldJarList.contains(fileNameList.get(i))){
                for(int j = i+1 ;j<size;j++){
                    cmprTemp = fileNameList.get(j).split("[0-9\\._]*");
                    for(String s : cmprTemp){
                        tempCompareName += s;
                    }
                    match = (fileNameList.get(j).matches(regexFileType) && tempCompareName.matches(regex));
                    if(match){
                            cmprTemp = fileNameList.get(i).split("[a-zA-Z\\-\\._]*");
                            for(String s : cmprTemp){
                                verInfo1 += s;
                            }
                            verInfo1 += "000";
                            cmprTemp = fileNameList.get(j).split("[a-zA-Z\\-\\._]*");
                            for(String s : cmprTemp){
                                verInfo2 += s;
                            }
                            verInfo2 += "000";
                            int length = 0;
                            if(verInfo1.length()>verInfo2.length()){
                                length = verInfo2.length();                         
                        }else{
                            length = verInfo1.length();
                        }
                        if(Long.parseLong(verInfo1.substring(0,length))>=Long.parseLong(verInfo2.substring(0,length))){
                            count = 0;
                            if(!oldJarList.contains(fileNameList.get(j))){
                                oldJarList.add(fileNameList.get(j));
                                duplicateEntryMap.put(fileNameList.get(j),++count);
                            }else{
                                count = duplicateEntryMap.get(fileNameList.get(j));
                                duplicateEntryMap.put(fileNameList.get(j),++count);
                            }
                        }else{
                            tempJarName = fileNameList.get(i);
                        }
                        match = false;verInfo1 = "";verInfo2 = "";
                }
                    tempCompareName = "";
                }
                if(tempJarName!=null && !tempJarName.equals("")){
                    count = 0;
                    if(!oldJarList.contains(fileNameList.get(i))){
                        oldJarList.add(fileNameList.get(i));
                        duplicateEntryMap.put(fileNameList.get(i),++count);
                    }else{
                        count = dupl    icateEntryMap.get(fileNameList.get(i));
                        duplicateEntryMap.put(fileNameList.get(i),++count);
                    }
                    tempJarName = "";
                }
            }
            compareName = "";
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
    return duplicateEntryMap;
}    

何 findDuplicatesOrLowerVersion(List fileNameList) 関数タスク - 単純に重複を見つけ、ファイルの名前と下位バージョンが繰り返される回数を含むマップを渡します。

Try this. The remaining file exist in the folder should be latest or files with out duplicates.Am using this for finding the oldest files.on the basis of that it will find the old and delete it.
This am only checking the name..Futher improvement you can made.

Where PatternClassifier is a class which contains the second method given here.
于 2013-02-16T13:47:46.407 に答える