2010-09-07 58 views
1

我們的應用程序中有大約80個罐子。所有的都是在ant中使用javac任務和jar任務創建的。如何爲特定任務創建螞蟻監聽器

我想介紹findbug檢查。一種選擇是創建一個findbug check ant項目。這有所有的罐子,所有的源路徑在其中定義。這是有效的 - 需要很大的空間。結果分析也不太直截了當。首先有成千上萬的警告。

我正在考慮的一個選擇是在javac任務ant上運行具有特殊偵聽器的ant,提取源和類位置,並使用源和類文件信息調用findbug任務。任何其他方式將findbug引入到一個大型項目中。

+0

我們在我們的項目中的所有代碼上運行findbugs taskdef classname =「edu.umd.cs.findbugs.anttask.FindBugsTask」。如果您只希望首先發現主要錯誤,則可以將reportLevel設置爲高。不行嗎? – JoseK 2010-09-08 10:05:01

+0

我必須編輯80個奇怪的build.xml文件來介紹findbug。我所做的是爲javac創建一個偵聽器,並使用它的值來創建findbug任務並運行這些工具。工作正常。 – Jayan 2010-09-11 09:00:51

回答

0

tweaked taskFinished()...對我的用法很好。

public class JavacListener implements BuildListener 

    public void taskFinished(BuildEvent be) { 

      if (be.getTask() instanceof UnknownElement) { 
       UnknownElement ue= (UnknownElement) be.getTask(); 
       ue.maybeConfigure(); 

       if (ue.getTask() instanceof Javac) { 
       Javac task = (Javac)ue.getTask(); 
        final Path sourcepath = task.getSrcdir(); 
        FindBugsTask fbtask = new FindBugsTask(); 
        System.out.println ("Trying FindBugs"); 
        fbtask.setSourcePath(sourcepath); 
        fbtask.setAuxClasspath(task.getClasspath()); 
        Path destPath = new Path(task.getProject()); 
        destPath.setPath(task.getDestdir().getAbsolutePath()); 
        fbtask.setAuxAnalyzepath(destPath); 
        fbtask.setOutputFile(getFileName(task.getProject())); 
        fbtask.setProject(task.getProject()); 

        fbtask.setHome(new File("C:\\apps\\findbugs-1.3.0")); 
        fbtask.execute(); 
       } 

      } else { 
       System.out.println(be.getTask().getClass().getName()); 
       System.out.println(be.getTask().getTaskName()); 
      } 
     } 
..