在Play Framework 2中使用FindBugs

mpo*_*den 5 findbugs sbt playframework-2.0

我想将FindBugs集成到Play Framework 2 Java项目的构建过程中.

这可能吗?如果是,那么使其工作所需的配置步骤是什么?

我假设可以使用findbugs4sbt,但我不确定如何设置它.

Mar*_*zke 4

我昨天刚刚这样做并将其记录在Integrating Findbugs Into a Play Framework 2 Project (Java)中。

这是相关步骤:

  1. 从 bitbucket 下载我为 sbt 0.11定制的findbugs4sbt jar并将其放入project/lib

    更新:project/plugins.sbt在via中添加插件

    addSbtPlugin("de.johoop" % "findbugs4sbt" % "1.1.7")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 配置 findbugs4sbt 在project/Build.scala

    import de.johoop.findbugs4sbt.FindBugs._
    
    object ApplicationBuild extends Build {
    
      ...
    
      val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA,
        settings = Defaults.defaultSettings ++ findbugsSettings)
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

然后你就可以运行sbt findbugs它生成target/scala-2.9.1/findbugs/findbugs.xml.

由于 findbugs 还分析一些由 play 从路由和视图编译的类(并报告一些有关命名约定的问题),因此您可能希望忽略它们(因为无论如何您都无法改进它们)。为此,请使用以下 findbugs4sbt 设置(在project/Build.scala)中将它们从 findbugs 中排除:

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA,
settings = Defaults.defaultSettings ++ findbugsSettings).settings(
  findbugsExcludeFilters := Some(
    <FindBugsFilter>
      <!-- See docs/examples at http://findbugs.sourceforge.net/manual/filter.html -->
      <Match>
        <Class name="~views\.html\..*"/>
      </Match>
      <Match>
        <Class name="~Routes.*"/>
      </Match>
      <Match>
        <Class name="~controllers\.routes.*"/>
      </Match>
    </FindBugsFilter>
  )
)
Run Code Online (Sandbox Code Playgroud)