`
tntxia
  • 浏览: 1506914 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

怎样把Findbugs集成CruiseControl里面

阅读更多

Findbugs是一个Java项目的静态分析工具

 

CruiseControl很好的支持了Findbugs的集成。

 

本文主要讲述如何将Findbugs集成了CruiseControl之中。

 

第一步:增加Findbugs到Build文件中

 

在Ant的Build文件中,增加:

 

<findbugs home="${findbugs.home}"
        output="xml:withMessages"
        outputFile="findbugs/${projectname}-fb.xml">
.
.
.
</findbugs>

 

第二步:增加CruiseControl的日志文件指向

 

在CruiseControl的Config.xml文件中增加

 

<merge dir="${builddir}/findbugs" pattern="*-fb.xml"/>

 

到<log>标签

 

 

第三步:增加cruisecontrol.css的内容

 

 

找到{CruiseControl安装目录}\webapps\cruisecontrol\css文件夹下的cruisecontrol.css文件中,在文件的末尾加上:

 

 

.findbugs-oddrow { background-color:#CCCCCC }
.findbugs-data { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; }
.findbugs-sectionheader { background-color:#000066; font-family:arial,helvetica,sans-serif; font-size:10pt; color:#FFFFFF; }
.findbugs-tablerow0 { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color: #FFFFFF; }
.findbugs-tablerow1 { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color:#CCCCCC; }
.findbugs-detailrow0 { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color: #FFFFFF; }
.findbugs-detailrow1 { font-family:arial,helvetica,sans-serif; font-size:8pt; color:#000000; background-color:#CCCCCC; }
.findbugs-tableheader { font-family:arial,helvetica,sans-serif; font-size:9pt; font-weight: bold; color:#000080; background-color:#CCDDDD; }
.findbugs-warningtable tr.findbugs-tablerow0:hover, .findbugs-warningtable tr.findbugs-tablerow1:hover { background-color: #aaffaa; }
.findbugs-priority-1 { color: red; font-weight: bold; }
.findbugs-priority-2 { color: orange; font-weight: bold; }
.findbugs-priority-3 { color: green; font-weight: bold; }
.findbugs-priority-4 { color: blue; font-weight: bold;}

 

 

第四步:在CruiseControl的主界面上增加一个新的Tab。

 

找到{CruiseControl安装目录}\webapps\cruisecontrol文件夹下的main.jsp文件中,在文件加上:


          <cruisecontrol:tab name="findbugs" label="FindBugs" >
            <%@ include file="findbugs.jsp" %>
          </cruisecontrol:tab>

 

 

第五步:增加findbugs.jsp

 

增加到{CruiseControl安装目录}\webapps\cruisecontrol中,

内容为:

<%@ taglib uri="/WEB-INF/cruisecontrol-jsp11.tld" prefix="cruisecontrol"%>
<cruisecontrol:xsl xslFile="/xsl/findbugs-details.xsl"/>

 

第六步:增加 findbugs-details.xsl

 

 

 

 

增加到 {CruiseControl安装目录}\webapps\cruisecontrol\xsl 中,

内容为:

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!--
  FindBugs - Find bugs in Java programs
  Copyright (C) 2004,2005 University of Maryland
  Copyright (C) 2005, Chris Nappin

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-->

<!--
  A simple XSLT stylesheet to transform FindBugs XML results
  annotated with messages into HTML.

  If you want to experiment with modifying this stylesheet,
  or write your own, you need to generate XML output from FindBugs
  using a special option which lets it know to include
  human-readable messages in the XML.  Invoke the findbugs script
  as follows:

    findbugs -textui -xml:withMessages -project myProject.fb > results.xml

  Then you can use your favorite XSLT implementation to transform
  the XML output into HTML. (But don't use xsltproc. It generates well-nigh
  unreadable output, and generates incorrect output for the
  <script> element.)

  Authors:
  David Hovemeyer
  Chris Nappin (summary table)
  Nicholas Cull (adapted for CruiseControl)
-->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" />

<xsl:template match="/">
<xsl:apply-templates select="." mode="findbugs"/>
</xsl:template>

<xsl:template match="/" mode="findbugs">
<xsl:variable name="unique-catkey" select="/cruisecontrol/BugCollection/BugCategory/@category"/>

<script type="text/javascript">
function toggleRow(elid) {
if (document.getElementById) {
element = document.getElementById(elid);
if (element) {
if (element.style.display == 'none') {
element.style.display = 'block';
//window.status = 'Toggle on!';
} else {
element.style.display = 'none';
//window.status = 'Toggle off!';
}
}
}
}
</script>

<xsl:if test="count(cruisecontrol/BugCollection) = 0">
FindBugs was not run against this project.
</xsl:if>

<xsl:if test="count(cruisecontrol/BugCollection) &gt; 0">
<table class="header" align="center" border="0" cellpadding="8" cellspacing="0" width="98%">
<tr>
<th class="big">FindBugs Report</th>
</tr>
</table>

<table align="center" cellpadding="8" cellspacing="0" border="0" width="98%">
<tr>
<td class="findbugs-sectionheader">Metrics</td>
</tr>
<xsl:apply-templates select="/cruisecontrol/BugCollection/FindBugsSummary" mode="findbugs"/>
<tr>
<td>&#160;</td>
</tr>
<tr>
<td class="findbugs-sectionheader">Summary</td>
</tr>
<tr>
<td>

<table width="500" cellpadding="5" cellspacing="2">
<tr class="findbugs-tableheader">
<th align="left">Warning Type</th>
<th align="right">Number</th>
</tr>

<xsl:for-each select="$unique-catkey">
<xsl:sort select="." order="ascending"/>
<xsl:variable name="catkey" select="."/>
<xsl:variable name="catdesc" select="/cruisecontrol/BugCollection/BugCategory[@category=$catkey]/Description"/>
<xsl:variable name="styleclass">
<xsl:choose>
<xsl:when test="position() mod 2 = 1">findbugs-tablerow0</xsl:when>
<xsl:otherwise>findbugs-tablerow1</xsl:otherwise>
</xsl:choose>
</xsl:variable>

<tr class="{$styleclass}">
<td><xsl:value-of select="$catdesc"/> Warnings</td>
<td align="right"><xsl:value-of select="count(/cruisecontrol/BugCollection/BugInstance[@category=$catkey])"/></td>
</tr>
</xsl:for-each>

<xsl:variable name="styleclass">
<xsl:choose>
<xsl:when test="count($unique-catkey) mod 2 = 0">findbugs-tablerow0</xsl:when>
<xsl:otherwise>findbugs-tablerow1</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<tr class="{$styleclass}">
<td><b>Total</b></td>
<td align="right"><b><xsl:value-of select="count(/cruisecontrol/BugCollection/BugInstance)"/></b></td>
</tr>
</table>

</td>
</tr>
<tr>
<td>&#160;</td>
</tr>
<tr>
<td class="findbugs-sectionheader">Warnings</td>
</tr>
<tr class="findbugs-tablerow0">
<td>Click on a warning row to see full context information.</td>
</tr>
<tr>
<td>

<table align="center" cellpadding="8" cellspacing="0" border="0" width="98%">
<xsl:for-each select="$unique-catkey">
<xsl:sort select="." order="ascending"/>
<xsl:variable name="catkey" select="."/>
<xsl:variable name="catdesc" select="/cruisecontrol/BugCollection/BugCategory[@category=$catkey]/Description"/>

<xsl:call-template name="generateWarningTable">
<xsl:with-param name="warningSet" select="/cruisecontrol/BugCollection/BugInstance[@category=$catkey]"/>
<xsl:with-param name="sectionTitle"><xsl:value-of select="$catdesc"/> Warnings</xsl:with-param>
<xsl:with-param name="sectionId">Warnings_<xsl:value-of select="$catkey"/></xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</table>

</td>
</tr>
<tr>
<td>&#160;</td>
</tr>
<tr>
<td class="findbugs-sectionheader"><a name="Details">Details</a></td>
</tr>
<xsl:apply-templates select="/cruisecontrol/BugCollection/BugPattern" mode="findbugs">
<xsl:sort select="@abbrev"/>
<xsl:sort select="ShortDescription"/>
</xsl:apply-templates>
<tr>
<td>&#160;</td>
</tr>
</table>
</xsl:if>
</xsl:template>

<xsl:template match="BugInstance" mode="findbugs">
<xsl:variable name="warningId"><xsl:value-of select="generate-id()"/></xsl:variable>

<tr class="findbugs-tablerow{position() mod 2}" onclick="toggleRow('{$warningId}');">
<td>
<span>
<xsl:attribute name="class">findbugs-priority-<xsl:value-of select="@priority"/></xsl:attribute>
<xsl:value-of select="@abbrev"/>
</span>
</td>
<td>
<xsl:value-of select="LongMessage"/>
</td>
</tr>

<!-- Add bug annotation elements: Class, Method, Field, SourceLine, Field -->
<tr class="findbugs-detailrow{position() mod 2}">
<td/>
<td>
<p id="{$warningId}" style="display: none;">
Bug type <xsl:value-of select="@type"/>
<xsl:for-each select="./*/Message">
<br/><xsl:value-of select="text()" disable-output-escaping="no"/>
</xsl:for-each>
</p>
</td>
</tr>
</xsl:template>

<xsl:template match="BugPattern" mode="findbugs">
<tr>
<td>
<table width="100%" cellspacing="0">
<tr class="findbugs-tableheader">
<td><a name="{@type}"><xsl:value-of select="@type"/>: <xsl:value-of select="ShortDescription"/></a></td>
</tr>
<tr>
<td class="findbugs-tablerow0">
<xsl:value-of select="Details" disable-output-escaping="yes"/>
</td>
</tr>
</table>
</td>
</tr>
</xsl:template>

<xsl:template name="generateWarningTable">
<xsl:param name="warningSet"/>
<xsl:param name="sectionTitle"/>
<xsl:param name="sectionId"/>

<tr>
<td class="findbugs-sectionheader">
<a name="{$sectionId}"><xsl:value-of select="$sectionTitle"/></a>
</td>
</tr>
<tr>
<td>

<table class="findbugs-warningtable" width="100%" cellspacing="0">
<tr class="findbugs-tableheader">
<th align="left">Code&#160;</th>
<th align="left">Warning</th>
</tr>
<xsl:apply-templates select="$warningSet" mode="findbugs">
<xsl:sort select="@abbrev"/>
<xsl:sort select="Class/@classname"/>
</xsl:apply-templates>
</table>

</td>
</tr>
</xsl:template>

<xsl:template match="FindBugsSummary" mode="findbugs">
<xsl:variable name="kloc" select="@total_size div 1000.0"/>
<xsl:variable name="format" select="'#######0.00'"/>

<tr class="findbugs-tablerow0">
<td>
<xsl:value-of select="@total_size"/> lines of code analysed,
in <xsl:value-of select="@total_classes"/> classes,
in <xsl:value-of select="@num_packages"/> packages.
</td>
</tr>
<tr>
<td>

<table width="500" cellpadding="5" cellspacing="2">
<tr class="findbugs-tableheader">
<th align="left">Metric</th>
<th align="right">Total</th>
<th align="right">Density*</th>
</tr>
<tr class="findbugs-tablerow0">
<td>High Priority Warnings</td>
<td align="right"><xsl:value-of select="@priority_1"/></td>
<td align="right"><xsl:value-of select="format-number(@priority_1 div $kloc, $format)"/></td>
</tr>
<tr class="findbugs-tablerow1">
<td>Medium Priority Warnings</td>
<td align="right"><xsl:value-of select="@priority_2"/></td>
<td align="right"><xsl:value-of select="format-number(@priority_2 div $kloc, $format)"/></td>
</tr>

<xsl:if test="@priority_3">
<tr class="findbugs-tablerow0">
<td>Low Priority Warnings</td>
<td align="right"><xsl:value-of select="@priority_3"/></td>
<td align="right"><xsl:value-of select="format-number(@priority_3 div $kloc, $format)"/></td>
</tr>
</xsl:if>

<xsl:variable name="totalClass">
<xsl:choose>
<xsl:when test="@priority_3"><xsl:text>findbugs-tablerow1</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>findbugs-tablerow0</xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:variable>

<tr class="{$totalClass}">
<td><b>Total Warnings</b></td>
<td align="right"><b><xsl:value-of select="@total_bugs"/></b></td>
<td align="right"><b><xsl:value-of select="format-number(@total_bugs div $kloc, $format)"/></b></td>
</tr>
</table>

</td>
</tr>
<tr class="findbugs-tablerow0">
<td><i>(* Defects per Thousand lines of non-commenting source statements)</i></td>
</tr>
</xsl:template>

</xsl:stylesheet> 

 

第七步:增加 buildresults.xsl 的内容

 

.
.
.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:import href="maven.xsl"/>
  <xsl:import href="nant.xsl"/>
  <xsl:import href="checkstyle.xsl"/>
  <xsl:import href="pmd.xsl"/>
  <xsl:import href="findbugs.xsl"/>
.
.
.
  <xsl:template match="/">
    <p><xsl:apply-templates select="$cruisecontrol.list" mode="maven"/></p>
    <p><xsl:apply-templates select="$cruisecontrol.list" mode="nant"/></p>
    <p><xsl:apply-templates select="$cruisecontrol.list" mode="checkstyle"/></p>
    <p><xsl:apply-templates select="$cruisecontrol.list" mode="pmd"/></p>
    <p><xsl:apply-templates select="$cruisecontrol.list" mode="findbugs"/></p>
.
.

第八步:增加 findbugs.xsl 文件

 

内容为:

 

 <?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>

    <!-- Any FindBugs error with a priority below this threshold are considered
         warnings and not errors
    -->
    <xsl:param name="findbugs.warning.threshold" select="3"/>

    <xsl:template match="/" mode="findbugs">
<xsl:apply-templates select="/cruisecontrol/BugCollection" mode="findbugs"/>
    </xsl:template>

    <xsl:template match="BugCollection" mode="findbugs">
        <xsl:variable name="total.error.count" select="count(BugInstance[@priority &lt; $findbugs.warning.threshold])" />
        <xsl:variable name="total.warning.count" select="count(BugInstance)" />
        <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%">
          <colgroup>
              <col width="45%"></col>
              <col width="5%"></col>
              <col width="50%"></col>
          </colgroup>
          <tr>
            <td class="findbugs-sectionheader" colspan="3">
                FindBugs errors/warnings (<xsl:value-of select="$total.error.count"/>
                / <xsl:value-of select="$total.warning.count"/>)
            </td>
          </tr>
            <xsl:for-each select="BugInstance">
              <tr>
                <xsl:if test="position() mod 2 = 1">
                  <xsl:attribute name="class">findbugs-oddrow</xsl:attribute>
                </xsl:if>
                <td class="findbugs-data"><xsl:value-of select="Class/@classname" /></td>
                <td class="findbugs-data" align="right"><xsl:value-of select="SourceLine[1]/@start" /></td>
                <td class="findbugs-data"><xsl:value-of select="ShortMessage/text()" /></td>
              </tr>
            </xsl:for-each>
        </table>
    </xsl:template>

    <xsl:template match="*" mode="findbugs"/>

    <xsl:template match="/">
        <xsl:apply-templates select="." mode="findbugs"/>
    </xsl:template>
</xsl:stylesheet>

 

 

 

 

第九步:增加 metrics.jsp 的内容

 

.
.
<jsp:useBean id="xpathData" class="net.sourceforge.cruisecontrol.chart.XPathChartData" />
<%
    xpathData.add("CheckStyle", "count(/cruisecontrol/checkstyle/file/error)");
    xpathData.add("FindBugs", "count(/cruisecontrol/BugCollection/BugInstance)");
    xpathData.add("PMD", "count(/cruisecontrol/pmd/file/violation)");
    xpathData.add("Javadoc", "count(/cruisecontrol/build//target/task[@name='javadoc'])");
%>
.
.
.

 

 

效果图见附件

  • 大小: 18.7 KB
  • 大小: 7.3 KB
分享到:
评论

相关推荐

    Jenkins 与findbugs集成

    ### Jenkins 与 FindBugs 集成 在软件开发过程中,持续集成(CI)工具如Jenkins可以显著提高代码质量和开发效率。FindBugs是一款用于检测Java代码中潜在错误和漏洞的静态分析工具,它可以有效地帮助开发者在早期...

    CruiseControl及ant配置

    **CruiseControl**是一种持续集成(Continuous Integration, CI)工具,主要用于自动化软件构建过程。它支持多种构建工具和版本控制系统,能够帮助开发团队实现自动化的构建、测试和部署。 **特点:** - **集成能力...

    ant与findBugs集成

    ant编译后用findBugs扫描代码的硬伤,让你知道自己的的代码哪来不行。。

    findbugs 1.3.9 findbugs 1.3.9

    4. **集成友好**:1.3.9版本提供了对Eclipse的集成,通过edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821.zip等插件,可以直接在开发环境中进行实时检查,提升开发效率。 5. **源码分析**:findbugs-1.3.9-...

    hudson集成findbugs插件

    《Hudson集成FindBugs插件详解》 在软件开发过程中,确保代码质量是至关重要的。为了弥补单元测试和代码审查的不足,我们可以利用静态分析工具,如FindBugs,来检测代码中的潜在问题和缺陷。本文将详细介绍如何在...

    findbugs压缩包+findbugs.jar+findbugs-ant.jar

    这个压缩包包含了FindBugs的基本组件以及与其相关的Ant任务支持,使得在Java项目中集成FindBugs变得简单易行。 标题中的"findbugs压缩包+findbugs.jar+findbugs-ant.jar"指的是该压缩文件内包含FindBugs的主要库...

    eclipse中findbugs插件

    FindBugs插件是将FindBugs工具集成到Eclipse中的一个扩展,使得用户在开发过程中可以方便地检查代码问题。 安装FindBugs插件的过程相对简单。首先,你需要下载`edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-...

    findbugs.jar+findbugs-ant.jar

    将FindBugs集成到Eclipse中,可以帮助开发者提高代码质量,减少运行时错误,并遵循最佳编码实践。 标题中的"findbugs.jar"和"findbugs-ant.jar"是FindBugs工具的核心组件。`findbugs.jar`包含了FindBugs的主要分析...

    findbugs工具测试java实验报告

    6. **持续集成**:为了保证代码质量的持续改进,可以将FindBugs集成到持续集成(CI)流程中,每次提交代码时自动运行FindBugs,及时发现新引入的问题。 实验报告中还可能涵盖了不同类型的FindBugs警告实例,以及如何...

    findbugs插件

    你需要打开这个文件,将里面的路径替换为当前解压后的FindBugs目录路径。 3. **集成到Eclipse**:将更新后的`findbugs.link`文件移动到Eclipse的工作目录下的`dropins`文件夹。`dropins`是Eclipse用来自动识别和...

    Eclipse集成findBugs步骤

    【Eclipse集成FindBugs步骤详解】 FindBugs是一款强大的Java静态代码分析工具,它的主要目的是在不执行程序的情况下,通过分析字节码来找出潜在的缺陷和性能问题,从而帮助开发者提高代码质量和稳定性。不同于关注...

    Gradle平台集成静态代码检查(findbugs,pmd,checkstyle)

    本知识点主要聚焦于如何在Gradle构建平台上集成Findbugs、Checkstyle、PMD这三种流行的静态代码检查工具。 **Gradle平台集成静态代码检查** **1. 静态代码检查工具简介** - **Findbugs**:这是一个分析Java字节码...

    SonarQube的FindBugs插件sonar-findbugs-plugin.jar,包含FindBugs Security Audit等规则

    SonarQube的FindBugs插件sonar-findbugs-plugin.jar(版本:4.0.1-SNAPSHOT),包含FindBugs Security Audit等规则,可以离线集成到sonarqube。

    findbugs的插件.zip

    FindBugs 是一个使用静态分析来 ** 查找 Java 代码中的错误 ** 的程序。它是免费软件 当前版本的 FindBugs 是 3.0.1 FindBugs 运行需要 1.7 或更高版本的 JRE(或 JDK)

    myeclipse10插件-findBugs

    《MyEclipse10与FindBugs的集成与应用》 在软件开发过程中,代码质量是决定项目成功与否的关键因素之一。为了确保代码的健壮性和可维护性,开发人员通常会采用各种静态代码分析工具来检测潜在的问题。在Java开发...

    findbugs-3.0.1.zip

    按照说明,开发者可以快速上手,将FindBugs集成到自己的开发流程中。 5. **findbugs-3.0.1** 这个文件是FindBugs 3.0.1的二进制包,可能包含可执行文件、库文件、文档和其他必要的组件。解压后,用户可以查看具体...

    Eclipse集成findBugs步骤.doc

    **Eclipse集成FindBugs详解** FindBugs是一款强大的静态代码分析工具,它能帮助开发者在代码执行前发现潜在的问题和bug,从而提高代码的质量和稳定性。以下将详细介绍如何在Eclipse环境中集成FindBugs插件。 ### ...

    代码检测findbugs1.3.4

    插件安装时,我们只需在eclipse根目录下新建一个【links】目录,然后在里面创建【.link】扩展名的文件,在里面写上类似于【path=F:\\IDE\\eclipsePlugin\\findbugs\\findbugs1.3.4】这样的配置信息,不就可以统一...

    网络上搜集的Findbugs在Ant下的配置方法

    在Ant构建环境中集成FindBugs,可以帮助开发者在项目构建过程中自动检查代码质量,提高软件的可靠性。 ### 一、安装Findbugs 首先,你需要从FindBugs的官方网站下载最新版本的FindBugs工具,并将其解压到一个合适...

    sonar-findbugs插件源码

    `sonar-findbugs`插件是SonarQube与FindBugs集成的桥梁,它负责在SonarQube平台上运行FindBugs分析,并将结果展示在SonarQube的报告中。通过分析`sonar-findbugs`的源码,我们可以了解到以下几个关键知识点: 1. **...

Global site tag (gtag.js) - Google Analytics