Ant/FindBugs のバックアップ(No.23)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Ant/FindBugs へ行く。
  - 1 (2012-01-19 (木) 18:51:01)
- 2 (2012-01-21 (土) 15:16:57)
- 3 (2012-02-14 (火) 18:57:38)
- 4 (2012-02-16 (木) 21:43:15)
- 5 (2012-02-17 (金) 14:28:16)
- 6 (2012-03-05 (月) 16:38:51)
- 7 (2012-03-23 (金) 18:35:56)
- 8 (2012-07-20 (金) 13:49:47)
- 9 (2012-09-13 (木) 19:48:29)
- 10 (2013-01-21 (月) 16:54:20)
- 11 (2013-01-22 (火) 11:01:05)
- 12 (2013-01-25 (金) 13:09:06)
- 13 (2013-10-30 (水) 21:58:49)
- 14 (2014-09-02 (火) 16:08:58)
- 15 (2014-09-24 (水) 18:17:28)
- 16 (2014-09-26 (金) 19:11:29)
- 17 (2014-11-19 (水) 14:48:43)
- 18 (2014-12-01 (月) 17:25:11)
- 19 (2017-04-17 (月) 16:43:28)
- 20 (2018-10-30 (火) 16:42:34)
- 21 (2025-01-03 (金) 08:57:02)
- 22 (2025-01-03 (金) 09:02:38)
- 23 (2025-01-03 (金) 09:03:21)
- 24 (2025-01-03 (金) 09:04:02)
- 25 (2025-06-19 (木) 12:41:37)
- 26 (2025-06-19 (木) 12:43:47)
 
- title: AntでFindBugsを実行する author: aterai pubdate: 2012-01-19T18:51:01+09:00 description: 静的解析で潜在的なエラーを検査するFindBugsをAntから実行するためのサンプルターゲットなど。
Summary
AntからFindBugsを実行します。
サンプルターゲット
<property environment="env" />
<condition property="have.findbugs">
  <available file="${env.FINDBUGS_HOME}" />
</condition>
<target name="findbugs" depends="compile" if="have.findbugs">
  <echo>${env.FINDBUGS_HOME}</echo>
  <path id="findbugs.classpath">
    <fileset dir="${env.FINDBUGS_HOME}/lib">
      <include name="*-ant.jar" />
    </fileset>
  </path>
  <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"
    classpathref="findbugs.classpath" />
  <mkdir dir="${build.reports}" />
  <echo>userdir: ${user.dir}</echo>
  <echo>basedir: ${basedir}</echo>
  <findbugs home="${env.FINDBUGS_HOME}" effort="max" reportLevel="low"
          excludeFilter="${sca.dir}/excludefilter.xml"
          output="xml:withMessages" outputFile="${build.reports}/findbugs.xml">
    <auxClasspath refid="project.class.path" />
    <sourcePath path="${src.dir}" />
    <class location="${build.dest}" />
  </findbugs>
</target>
Explanation
Windows 7
- FindBugs Downloadsからダウンロードしたfindbugs-x.x.x.zipを適当な場所に展開し、環境変数FINDBUGS_HOMEに設定- 変数名: FINDBUGS_HOME
- 変数値: C:\Applications\findbugs-2.0.2
 
- 変数名: 
- %FINDBUGS_HOME%\lib\findbugs-ant.jarを、- %ANT_HOME%\libにコピー(シンボリックリンクでも可)
- ant findbugsで、- findbugs.xmlを生成し、- jenkinsの- FindBugsプラグインや、- %FINDBUGS_HOME%\bin\findbugs.batで- GUIに読み込む
Ubuntu 12.10
- FindBugs Downloadsから、findbugs-x.x.x.tar.gzをダウンロード
- 適当な場所に展開して、- $ANT_HOME/lib以下に、- findbugs-ant.jarをリンク
- .bashrcなどに、環境変数- FINDBUGS_HOMEを記述- export FINDBUGS_HOME=/usr/share/findbugs-2.0.2 
除外フィルタ
検査したくないエラーパターンを作成して、excludeFilterで指定することもできます。
- excludefilter.xml- <?xml version="1.0" encoding="UTF-8"?> <FindBugsFilter> <Match> <Bug pattern="SIC_INNER_SHOULD_BE_STATIC_ANON" /> </Match> </FindBugsFilter>
<findbugs home="${env.FINDBUGS_HOME}" effort="max" reportLevel="low"
        excludeFilter="${user.dir}/excludefilter.xml"
        output="xml:withMessages" outputFile="${build.reports}/findbugs.xml" >
FindBugs2.0でParseException: Unparseable date
- FindBugs2.0で、以下のような- java.text.ParseException: Unparseable date: "12/20/2011 09:17 PM EST"が発生する場合- Windows 7の日本語環境?- [findbugs] Executing findbugs from ant task [findbugs] Running FindBugs... [findbugs] java.text.ParseException: Unparseable date: "12/20/2011 09:17 PM EST" [findbugs] at java.text.DateFormat.parse(DateFormat.java:357) [findbugs] at edu.umd.cs.findbugs.Version.<clinit>(Version.java:175) [findbugs] at edu.umd.cs.findbugs.PluginLoader.init(PluginLoader.java:595) [findbugs] at edu.umd.cs.findbugs.PluginLoader.<init>(PluginLoader.java:280) ... 
 
- FindBugs™ - Find Bugs in Java Programsからfindbugs-2.0.0-source.zipをダウンロードして展開
- findbugs-2.0.0\src\java\edu\umd\cs\findbugs\updates\UpdateChecker.javaを変更- public class UpdateChecker { //public static final String PLUGIN_RELEASE_DATE = "MM/dd/yyyy hh:mm aa z"; public static final String PLUGIN_RELEASE_DATE = "MM/dd/yyyy HH:mm z";
- もしくは、findbugs-2.0.0\src\java\edu\umd\cs\findbugs\Version.javaの173行目付近を以下のように変更//SimpleDateFormat releaseDateFormat = new SimpleDateFormat(UpdateChecker.PLUGIN_RELEASE_DATE); SimpleDateFormat releaseDateFormat = new SimpleDateFormat(UpdateChecker.PLUGIN_RELEASE_DATE, Locale.ENGLISH);
- JDK 1.6.0_30などでコンパイル- > cd findbugs-2.0.0 > set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_30 > ant.bat 
- findbugs-2.0.0\libに生成された以下の- jarファイルを- %FINDBUGS_HOME%\lib\に上書きコピー- annotations.jar
- findbugs.jar
- findbugs-ant.jar
 
- 以下、再現テストコード
import java.text.*; import java.util.*; public class UnparseableDateTest { public static final String PLUGIN_RELEASE_DATE = "MM/dd/yyyy hh:mm aa z"; public static void main(String[] args) throws Exception { SimpleDateFormat enDateFormat = new SimpleDateFormat(PLUGIN_RELEASE_DATE, Locale.ENGLISH); System.out.println("1: "+enDateFormat.parse("12/20/2011 09:17 PM EST")); SimpleDateFormat jaDateFormat = new SimpleDateFormat(PLUGIN_RELEASE_DATE, Locale.JAPANESE); System.out.println("2: "+jaDateFormat.parse("12/20/2011 09:17 午後 EST")); SimpleDateFormat releaseDateFormat = new SimpleDateFormat(PLUGIN_RELEASE_DATE); System.out.println("3: "+releaseDateFormat.parse("12/20/2011 09:17 PM EST")); } }
- Windows 7,- cygwin,- mintty,- JDK 1.6.0_30で実行- $ export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.6.0_30" $ echo $JAVA_HOME /cygdrive/c/Program Files/Java/jdk1.6.0_30 $ "$JAVA_HOME/bin/javac.exe" UnparseableDateTest.java $ "$JAVA_HOME/bin/java.exe" -Duser.language=ja UnparseableDateTest 1: Wed Dec 21 11:17:00 JST 2011 2: Wed Dec 21 11:17:00 JST 2011 Exception in thread "main" java.text.ParseException: Unparseable date: "12/20/2011 09:17 PM EST" at java.text.DateFormat.parse(DateFormat.java:357) at UnparseableDateTest.main(UnparseableDateTest.java:13) $ "$JAVA_HOME/bin/java.exe" -Duser.language=en UnparseableDateTest 1: Wed Dec 21 11:17:00 JST 2011 2: Wed Dec 21 11:17:00 JST 2011 3: Wed Dec 21 11:17:00 JST 2011