Ant/ErrorProne のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Ant/ErrorProne へ行く。
- title: AntでError Proneを使用する author: aterai pubdate: 2018-10-27T20:57:37+09:00 description: AntでのJavaコードのコンパイラにコード解析を行うErrprProneを適用する方法など。
概要
Ant
でのJava
コードコンパイルにError Prone
を使用して、ソースコード解析を強化します。
サンプルターゲット
- 以下、Installationに記述されているbuild.xmlを参考に作成したターゲットのサンプル
- 公式の
build.xml
をほぼ丸写しで動作可能だが、2
つほど注意点があるxmlns:unless="ant:unless"
をルート要素に追加する必要がある<javaversion>
コンディションを使用しているので、ant
は1.10.2
以上を使用する必要がある- Release Notes of Apache Ant 1.10.2
sdkman
でant
をインストールすると、2018-10-27
現在の最新は1.10.1
なのでエラーになる
<?xml version="1.0" encoding="UTF-8"?>
<project name="example" default="compile" xmlns:unless="ant:unless">
...
<path id="project.class.path">
<pathelement location="${build.dest}" />
<pathelement location="${java.home}/lib/javaws.jar" />
<pathelement path="${java.class.path}" />
</path>
<target name="errorprone" depends="prepare-src, prepare-resource, prepare-web">
<!-- using github.com/google/error-prone-javac is required when running on JDK 8 -->
<property name="javac.jar" location="${env.ERRORPRONE_HOME}/javac-9+181-r4173-1.jar"/>
<condition property="jdk9orlater">
<javaversion atleast="9"/>
</condition>
<path id="processorpath.ref">
<fileset dir="${env.ERRORPRONE_HOME}" includes="*.jar" />
</path>
<javac srcdir="${build.src}"
excludes="**/module-info.java"
includes="**/*.java"
destdir="${build.dest}"
encoding="${compile.encoding}"
debug="${compile.debug}"
optimize="${compile.optimize}"
deprecation="${compile.deprecation}"
fork="yes"
includeAntRuntime="no"
classpathref="project.class.path">
<compilerarg value="-J-Xbootclasspath/p:${javac.jar}" unless:set="jdk9orlater"/>
<compilerarg line="-XDcompilePolicy=simple"/>
<compilerarg value="-processorpath"/>
<compilerarg pathref="processorpath.ref"/>
<compilerarg value="-Xplugin:ErrorProne -Xep:DeadException:ERROR -Xep:CatchAndPrintStackTrace:OFF" />
<compilerarg value="-J-Dfile.encoding=UTF-8" />
<!-- compilerarg value="-J-Dsun.jnu.encoding=UTF-8" / -->
</javac>
</target>
解説
- Installationに記述されている
error_prone_core-2.3.2-with-dependencies.jar
、jFormatString-3.0.0.jar
、javac-9+181-r4173-1.jar
をダウンロードし、適当な(例えば環境変数ERRORPRONE_HOME
を設定した)場所に配置する - 上記のような
errorprone
ターゲットをbuild.xml
に追加する、またはcomplie
ターゲットの<javac>
を置き換えてコンパイルする
- 例えば
MultipleTopLevelClasses
をチェックしないように設定する場合は、以下のように-Xep:MultipleTopLevelClasses:OFF
を引数に追加する<compilerarg value="-Xplugin:ErrorProne -Xep:DeadException:ERROR -Xep:MultipleTopLevelClasses:OFF -Xep:CatchAndPrintStackTrace:OFF" />
- Command-line flags
文字化け
- 環境変数
ANT_OPTS
などに-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
を設定してもcygwin
のbash
(Character set
はUTF-8
)で文字化けするPMD
などの出力は正常javac
タスクのencoding
を指定しても効果なし
errorprone: [javac] Compiling 1 source file to C:\jst\ComboBoxItemCopy\target\classes [javac] C:\jst\ComboBoxItemCopy\target\src\example\MainPanel.java:105: �x��:[CatchAndPrintStackTrace] Logging or rethrowing exceptions should usually be preferred to catching and calling printStackTrace [javac] ex.printStackTrace(); [javac] ^ [javac] (see https://errorprone.info/bugpattern/CatchAndPrintStackTrace) [javac] �x��1��
javac
タスクの子要素に<compilerarg value="-J-Dfile.encoding=UTF-8" />
を追加すると文字化けは解消された- コンソール出力には
<compilerarg value="-J-Dsun.jnu.encoding=UTF-8" />
が効きそうだが、なぜか効果なし
- コンソール出力には
errorprone: [javac] Compiling 1 source file to C:\jst\ComboBoxItemCopy\target\classes [javac] C:\jst\ComboBoxItemCopy\target\src\example\MainPanel.java:105: 警告:[CatchAndPrintStackTrace] Logging or rethrowing exceptions should usually be preferred to catching and calling printStackTrace [javac] ex.printStackTrace(); [javac] ^ [javac] (see https://errorprone.info/bugpattern/CatchAndPrintStackTrace) [javac] 警告1個