0

我管理着一个拥有大量工件的 Ivy 存储库,并且我被要求列出我们拥有一百多个第三方库。有谁知道从常春藤回购中检索工件列表的方法?

4

2 回答 2

0

我发现没有这样的方法可以做到这一点,我在 java 中编写了一个脚本来获得结果,我想如果将来人们想要它,我可能会分享答案,它也被格式化为直接复制到 Excel 文档中。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;


public class ListArtifacts {

    public static void main(String[] args) { 
        Collection<File> all = new ArrayList<File>(); 
        addTree(new File("."), all);
        String delimeter = "\\.";
        List<String> remove = new ArrayList<String>();
        List<String> everything = new ArrayList<String>();
        remove.add("pom");
        remove.add("jar");
        remove.add("xml");
        remove.add("txt");
        remove.add("sha1");
        remove.add("md5");
        remove.add("metadata");
        remove.add("tar");
        remove.add("gz");
        remove.add("zip");
        remove.add("rar");


        FileWriter fWriter = null; 
        BufferedWriter writer = null; 
        try { 
            fWriter = new FileWriter("info.txt"); 
            writer = new BufferedWriter(fWriter); 

            Iterator itr = all.iterator();
            while (itr.hasNext() == true){
                String[] split;
                String temp = itr.next().toString();
                split = temp.split(delimeter);
                int i = 0;
                int j = 0;
                boolean flag = false;
                while (i < split.length){
                    while (j < remove.size()){
                        if (split[i].equals(remove.get(j))){
                            flag = true;
                        }
                        j++;
                    }
                    j = 0;
                    i++;
                }       
                if (flag == false){
                    String output = "";
                    int k=0;
                    boolean flag2 = false;
                    boolean hasVersion = false;
                    while (k < split.length){
                        if (flag2 == true){
                            output += ".";
                            flag2 = false;
                        }                       
                        output = output + split[k].toString();

                        boolean lastInt = false;
                        try{
                        String last = split[k].substring(split[k].length() - 1); 
                        if (isInteger(last) == true)
                            lastInt = true;
                        }catch(Exception e){}

                        if ((isInteger(split[k].toString()) == true) || (lastInt == true)){
                            flag2 = true;
                            hasVersion = true;
                        }
                        k++;
                    }
                    if (hasVersion == true){
                        everything.add(output.substring(1));
                        writer.append(output.substring(1));
                        writer.newLine(); 
                    }
                }
            }
            int i = 0;
            String delim = "\\\\";
            String finalOutput = "";
            String toSplit = "";
            while (i < everything.size()){
                toSplit = everything.get(i);
                String[] split2 = toSplit.split(delim);
                finalOutput = split2[0] + "\t";
                int j = 1;
                while (j < split2.length-2){
                    finalOutput += split2[j] + ".";
                    j++;
                }
                finalOutput += split2[split2.length-2] + "\t";
                finalOutput += split2[split2.length-1];
                writer.append(finalOutput);
                writer.newLine(); 
                i++;
            }

            writer.close(); 
        } catch (Exception e) { 
        } 

        System.out.println(all); 
    } 

    public static boolean isInteger(String input )   
    {   
        try  
        {   
            Integer.parseInt(input);   
            return true;   
        }   
        catch(Exception e)   
        {   
            return false;   
        }   
    } 

    static void addTree(File file, Collection<File> all) { 
        File[] children = file.listFiles(); 
        if (children != null) { 
            for (File child : children) { 
                all.add(child); 
                addTree(child, all); 
            } 
        } 
    } 
}

我相信这可以做得更干净,但我没有做更高的思考,只是做了我想到的第一件事,没有修改。

于 2012-09-24T01:57:37.310 回答
0

如果您希望在构建期间使用 ivy 执行此操作,那么报告任务应该可以帮助您获取正在使用的所有 JAR 的报告。

如果您尝试从存储库管理器获取这些详细信息(涵盖所有可能的用户),您能回答@oers 的问题吗?存储库管理器通常会提供一些 API,您可以使用这些 API 来获取有关它们存储的工件的报告。

于 2012-09-24T03:27:41.593 回答