概要
Gradleをオフラインで実行したい場合、どのようにCodenarcとSpockを合わせて使えば良いかの一例を示す。
初めの準備
全て書くのは煩雑なので、gradle init
を実行する。
$ gradle init Select type of project to generate: 1: basic 2: application 3: library 4: Gradle plugin Enter selection (default: basic) [1..4] 2 Select implementation language: 1: C++ 2: Groovy 3: Java 4: Kotlin 5: Scala 6: Swift Enter selection (default: Java) [1..6] 2 Select build script DSL: 1: Groovy 2: Kotlin Enter selection (default: Groovy) [1..2] 1 Project name (default: sample): Source package (default: sample): > Task :init BUILD SUCCESSFUL in 35s
この時点でのレイアウト
$ tree . ├── app │ ├── build.gradle │ └── src │ ├── main │ │ ├── groovy │ │ │ └── sample │ │ │ └── App.groovy │ │ └── resources │ └── test │ ├── groovy │ │ └── sample │ │ └── AppTest.groovy │ └── resources ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle
build.gradleの変更
codenarcとspockを使えるようにするために、build.gradleを変更する。
- plugins
- codenarcプラグインを使う設定をする
- repositories
- dependencies
- 各タスクで、リポジトリ内外から読み込むjarファイルを指定する
- codenarc
- codenarc実行の細かな設定を決める
具体的に、記述は以下の通りになる(不要な列は略記)。
plugins { id 'groovy' id 'codenarc' } repositories { flatDir { dirs "/home/sample/lib", "/home/sample2/lib" } } dependencies { // ビルド時に必要な、Groovyの複数jarファイル implementation fileTree(dir: '/home/sample/lib', include: '*.jar') testImplementation 'org.spockframework:spock-core:2.0-groovy-4.0' // codenarcの実行時に必要なjarファイル codenarc fileTree(dir: '/home/sample/lib', include: '*.jar') codenarc fileTree(dir: '/home/sample2/lib', include: '*.jar') } codenarc { // デフォルトのバージョン以外のcodenarcを指定する toolVersion = '3.1.0' // 実行結果をhtmlファイルではなく、consoleに出力する reportFormat = 'console' }
補足として、repositoriesにローカルを指定する方法は、他の方法もある。
また、codenarcの実行設定は、他にも幾つか設定可能な項目がある。
codenarc.xmlの作成
codenarcは、指定されたコーディング規則だけをチェックするが、そのチェックする規則はcodenarc.xmlで指定できる。
ファイルは、デフォルトのレイアウトでは、以下の通りになるように配置する。
$ tree . ├── app │ ├── build.gradle │ └── src │ ├── main │ │ ├── groovy │ │ │ └── sample │ │ │ └── App.groovy │ │ └── resources │ └── test │ ├── groovy │ │ └── sample │ │ └── AppTest.groovy │ └── resources ├── config │ └── codenarc │ └── codenarc.xml <- これ ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle
xmlのベースは、サンプルとして以下があるのでこれを利用する。
また、指定する規則の一覧は以下にあるので、こちらから選んで指定する。
具体的に、記述は以下の通りになる。
<ruleset xmlns="http://codenarc.org/ruleset/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://codenarc.org/ruleset/1.0 http://codenarc.org/ruleset-schema.xsd" xsi:noNamespaceSchemaLocation="http://codenarc.org/ruleset-schema.xsd"> <ruleset-ref path='rulesets/basic.xml'></ruleset-ref> <ruleset-ref path='rulesets/braces.xml'></ruleset-ref> <ruleset-ref path='rulesets/comments.xml'></ruleset-ref> <ruleset-ref path='rulesets/concurrency.xml'></ruleset-ref> <ruleset-ref path='rulesets/convention.xml'></ruleset-ref> <ruleset-ref path='rulesets/design.xml'></ruleset-ref> <ruleset-ref path='rulesets/dry.xml'></ruleset-ref> <ruleset-ref path='rulesets/exceptions.xml'></ruleset-ref> <ruleset-ref path='rulesets/formatting.xml'></ruleset-ref> <ruleset-ref path='rulesets/generic.xml'></ruleset-ref> <ruleset-ref path='rulesets/groovyism.xml'></ruleset-ref> <ruleset-ref path='rulesets/imports.xml'></ruleset-ref> <ruleset-ref path='rulesets/jdbc.xml'></ruleset-ref> <ruleset-ref path='rulesets/junit.xml'></ruleset-ref> <ruleset-ref path='rulesets/logging.xml'></ruleset-ref> <ruleset-ref path='rulesets/naming.xml'></ruleset-ref> <ruleset-ref path='rulesets/security.xml'></ruleset-ref> <ruleset-ref path='rulesets/serialization.xml'></ruleset-ref> <ruleset-ref path='rulesets/size.xml'></ruleset-ref> <ruleset-ref path='rulesets/unnecessary.xml'></ruleset-ref> <ruleset-ref path='rulesets/unused.xml'></ruleset-ref> </ruleset>
補足として、要件に応じてjarファイルをタスクの依存関係に加える。
また、Gradleでは以下のルールはうまく適用できないものを含むので、除外する。
これに関して、以下を参考。
実行
この状態になれば、あとはコマンドを実行し、codenarcを実行できる。
$ gradle codenarcMain $ gradle codenarcTest $ gradle check # 上記2つを実行する
また、コマンドを実行して、テストも実行できる。
$ gradle test