Ant/Checkstyle の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Ant/Checkstyle へ行く。
- Ant/Checkstyle の差分を削除
--- title: AntでCheckstyleを実行する author: aterai pubdate: 2018-01-16T19:15:58+09:00 description: ソースコードを静的解析してコーディングルールの確認を行うCheckstyleをAntから実行するためのターゲットや、checks.xmlのサンプルなど。 --- #contents * 概要 [#summary] `Ant`から`Checkstyle`を実行してソースコードのコーディングルールをチェックします。 * サンプルターゲット [#target] - `build.xml`に記述するターゲットサンプル #code{{ <condition property="have.checkstyle"> <available file="${env.CHECKSTYLE_HOME}" /> </condition> <target name="checkstyle" if="have.checkstyle"> <path id="checkstyle.classpath"> <fileset dir="${env.CHECKSTYLE_HOME}"> <include name="*-all.jar" /> </fileset> </path> <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties" classpathref="checkstyle.classpath" /> <mkdir dir="${build.reports}" /> <checkstyle config="${sca.dir}/checks.xml" failOnViolation="false"> <formatter type="plain" /> <formatter type="xml" toFile="${build.reports}/checkstyle-result.xml" /> <fileset dir="${src.dir}" excludes="**/module-info.java" includes="**/*.java" /> </checkstyle> </target> }} * 解説 [#explanation] + [https://github.com/checkstyle/checkstyle/releases/ Releases · checkstyle/checkstyle]からダウンロードした`checkstyle-x.x-all.jar`を環境変数`%CHECKSTYLE_HOME%`を設定した場所にコピー + 上記のような`checkstyle`ターゲットを`build.xml`に追加し、`ant checkstyle`で`checkstyle-result.xml`を生成、`jenkins`の`Checkstyle`プラグインなどで読み込む + チェックするルールをカスタマイズする場合は、任意の`${sca.dir}`ディレクトリ以下に`checks.xml`を記述し、これを`config`属性で参照する -- [https://checkstyle.org/google_style.html checkstyle – Google's Style] -- [https://checkstyle.org/sun_style.html checkstyle – Sun's Java Style] * メモ [#l35831ab] ** module-info.java [#java9] - `8.4`では`Java 9`の`module-info.java`に未対応なので、`<exclude name="**/module-info.java" />`などで回避 C:\temp\jst\all.xml:47: Unable to process files: [C:\...\src\java\module-info.java] ** Unable to create Root Module [#BuildFailed] - `Checkstyle`のバージョン更新に伴うモジュールの廃止などの変更で、`config`ファイル(上記の例では`${user.dir}/checks.xml`)が不正になったときに発生する場合がある *** `8.2` [#x784951f] - `remove FileContentsHolder module as FileContents object is available for filters on TreeWalker in TreeWalkerAudit Event . Author: Timur, Roman Ivanov #3573` - `<module name="FileContentsHolder" />`を削除する必要がある - `LeftCurlyCheck: clarify behavior of 'nlow' option after removal of 'maxLineLength'. Author: Roman Ivanov #3855` - `<property name="maxLineLength" value="100"/>`を削除する必要がある #code{{ <module name="LeftCurly"> <property name="maxLineLength" value="100"/> </module> }} *** `8.1` [#eeda9083] - `Make SuppressionCommentFilter and SuppressWithNearbyCommentFilter children of TreeWalker. Author: Timur #4714` - `<module name="SuppressionCommentFilter" />`を`<module name="TreeWalker">`の子要素になるよう移動%%削除%%する必要がある * エラー [#ee5d9b99] * エラー [#error] ** AvoidEscapedUnicodeCharacters [#h327989d] - `Checksytle 8.7`で、`c.getFontMetrics(c.getFont()).charWidth('あ');`のようなコードをチェックすると、`error Unable to process files`とエラーになる -- `Windows`環境で、ファイルのエンコーディングは`UTF-8`になっているため? -- `JTextField#setText("あああ")`など`String`は問題なし -- `width = c.getFontMetrics(c.getFont()).charWidth('\u3042');`にすれば問題ないが、`AvoidEscapedUnicodeCharacters`と警告される #code{{ // @SuppressWarnings("AvoidEscapedUnicodeCharacters") @Override protected synchronized void damage(Rectangle r) { if (Objects.nonNull(r)) { JTextComponent c = getComponent(); x = r.x; y = r.y; // width = c.getFontMetrics(c.getFont()).charWidth('w'); // width = c.getFontMetrics(c.getFont()).charWidth('\u3042'); // Checksytle 8.7: error Unable to process files... width = c.getFontMetrics(c.getFont()).charWidth('あ'); height = r.height; c.repaint(); } } }} ---- - 以下のように`file.encoding`を指定すればエラーにならない -- `Ant`の`checkstyle`タスクでは`encoding`は指定できない?ので`ANT_OPTS`に`-Dfile.encoding=UTF-8`を設定する必要がある -- コマンドラインで`ant -Dfile.encoding=UTF-8 checkstyle`としても効果がない? "$JAVA_HOME/bin/java" -Dfile.encoding=utf-8 -jar "$CHECKSTYLE_HOME/checkstyle-8.7-all.jar" -c ./checks.xml OverTypeMode/src/java/ * 参考リンク [#reference] - [https://github.com/checkstyle/checkstyle checkstyle/checkstyle: Checkstyle] - [https://checkstyle.org/ checkstyle – Checkstyle] - [https://checkstyle.org/style_configs.html checkstyle – Style Configurations] * コメント [#comment] #comment #comment