いまさら需要が全然ないと思うけど、Ant で FindBugs を実行する方法
いろいろあって Ant + FindBugs で性的解析をすることになったので、ちょっとした実行方法をメモします。
環境
ANT_ROOT=C:\tools\apache-ant-1.10.7 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_221
手順
Ant のインストール
最新のApache Ant(Java8以降対応のバージョン)をダウンロードし、展開したフォルダをCドライブ直下のtoolsフォルダに配置する(toolsフォルダがなければ自分で作成する)。
次に、システム環境変数に下記を追加する。
最後に、コマンドプロンプトで設定されているか確認する。
>ant -v Apache Ant(TM) version 1.10.7 compiled on September 1 2019 Trying the default build file: build.xml Buildfile: build.xml does not exist! Build failed
FindBugs のインストール
下記リンクから「findbugs-x.x.x.zip」をダウンロードする。
次に、ダウンロードしたzipを展開し、Cドライブ直下のtoolsフォルダに配置する。
次に、Ant から FindBugs を使用できるように、
「C:\tools\findbugs-3.0.1\lib\findbugs-ant.jar」を「C:\tools\apache-ant-1.10.7\lib」にコピーする(移動ではなく、コピー)。
※下記リンクに手順は記載されている。
※システム環境変数に設定をしなくても build.xml 上で設定は可能なため、今回は実施していない。
build.xml の作成
build.xml を作成するフォルダは、FindBugs を実行したいプロジェクト配下に配置する(複数のプロジェクトが存在する場合は今回は除く)。
xml の構成は jarファイル作成→FindBugs実行としている。FindBugs を実行するために必要な設定は以下と認識している。
FindBugs を Ant で実行する方法は下記リンクに記載されている。
<?xml version="1.0" encoding="UTF-8" ?> <project name="FindBugsTest" default="makeJar" basedir="."> <!-- 定数の定義。 build.xml上で使用する定数を定義する。 --> <!-- ビルドのベースディレクトリ。 何もなければ${basedir}を使っても問題ありませんが、 他プロジェクトのbuild.xmlからこのbuild.xmlのタスクを呼び出したとき、 basedirがずれてしまうことがあるので、別に定義しておく。 --> <dirname property="base" file="${ant.file}"/> <!-- JARファイル名 --> <property name="jarname" value="FindBugsTest" /> <!-- ビルド成果物ディレクトリ --> <property name="dir.target" value="target" /> <property name="dir.target.classes" value="${dir.target}/classes" /> <!-- srcディレクトリ --> <property name="dir.src" value="src" /> <!-- ソースファイルエンコード --> <property name="src.enc" value="UTF-8" /> <!-- JARファイル作成(開発用) --> <target name="makeJar" description="jarファイル作成"> <antcall target="clean"/> <antcall target="compile"/> <echo message="JARファイルの作成" /> <jar basedir="${dir.target.classes}" destfile="${base}/${dir.target}/${jarname}.jar" /> </target> <!-- ビルド成果物削除 --> <target name="clean" description="ビルド成果物削除"> <delete dir="${dir.target}" /> </target> <!-- コンパイル --> <target name="compile" description="コンパイル"> <echo message="コンパイルを開始します。" /> <mkdir dir="${dir.target.classes}"/> <javac srcdir="${dir.src}" destdir="${dir.target.classes}" encoding="${src.enc}" source="1.8" target="1.8" includeAntRuntime="false" debug="true"/> </target> <!-- FindBugs実行 --> <!-- FindBugsのタスクの実行に使用されるクラスを指定する。 --> <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask"/> <!-- FindBugsのHOMEディレクトリを指定する。 --> <property name="findbugs.home" value="C:\tools\findbugs-3.0.1" /> <!-- FindBugsのタスクを設定する。 --> <target name="findbugs" depends="makeJar"> <findbugs home="${findbugs.home}" output="html" outputFile="./findbugs-test.html"> <auxClasspath path="${basedir}/**/*.jar" /> <!--分析の対象にはしたくないjar(クラスパス)--> <sourcePath path="${basedir}/src/app/findbugs/test" /> <!-- 解析対象のソース配置場所 --> <class location="${base}/${dir.target}/${jarname}.jar"/> <!-- 解析対象のJavaプログラム(正規表現使用可能) --> </findbugs> </target> </project>
Ant の実行
build.xml ファイルが配置されているプロジェクトまで移動し、下記コマンドを実行する。
ant <target name>
以上で、jar のビルドと FindBugs が実行される。
おわりに
とりあえず、チュートリアル的なことはできたので、実務レベルでやっていこうと思います。また、これを機にビルドツールを自分なりにまとめてみると今後役立つのではと感じました。あと、自分はアプリのコーディングよりもビルドのコーディングのが楽しいと感じる傾向にあるかもしれないということがわかりました。
というわけで、次からはローカルPCでやらずに、Docker 上でやってみようと思っていたりしています。