かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その65 )( Gradle を 4.6 → 4.8.1 へ、Checkstyle を 8.8 → 8.11 へ、PMD を 6.4.0 → 6.5.0 へ、error-prone を 2.2.0 → 2.3.1 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その64 )( 入力画面3を作成する6、@SpringBootTest のテストは Spock+Groovy より JUnit4+Groovy の方が速い? ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Gradle を 4.6 → 4.8.1 へバージョンアップします。また compile 等が非推奨の書き方になっていたので、build.gradle を変更します。
    • Checkstyle を 8.8 → 8.11、PMD を 6.4.0 → 6.5.0、error-prone を 2.2.0 → 2.3.1 へバージョンアップします。

参照したサイト・書籍

目次

  1. Gradle を 4.6 → 4.8.1 へバージョンアップする
  2. build.gradle で compileimplementation に変更する
  3. Checkstyle を 8.8 → 8.11、PMD を 6.4.0 → 6.5.0 へバージョンアップする
  4. error-prone を 2.2.0 → 2.3.1 へバージョンアップする

手順

Gradle を 4.6 → 4.8.1 へバージョンアップする

build.gradle の以下の点を変更します。

task wrapper(type: Wrapper) {
    gradleVersion = '4.8.1'
}
  • gradleVersion = '4.6'gradleVersion = '4.8.1' に変更します。

コマンドプロンプトを起動し、gradlew wrapper コマンドを実行します。

f:id:ksby:20180711125042p:plain

gradle/wrapper/gradle-wrapper.properties を開くと gradle-4.8.1-bin.zip に変更されています。

f:id:ksby:20180711125255p:plain

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

f:id:ksby:20180711130045p:plain

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0. というメッセージが出たので、https://docs.gradle.org/4.8.1/userguide/command_line_interface.html#sec:command_line_warnings の記述を参考に gradlew --warning-mode=all コマンドを実行してみます。

f:id:ksby:20180711130455p:plain

1件メッセージが出ていました。wrapper という task はもうNGなので wrapper { ... } syntax を使え、ということらしいです。

Customizing the Gradle Wrapper を参考に build.gradle の以下の点を変更して、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

wrapper {
    gradleVersion = '4.8.1'
    distributionType = Wrapper.DistributionType.ALL
}
  • task wrapper(type: Wrapper)wrapper に変更します。
  • distributionType = Wrapper.DistributionType.ALL を追加します。

再度 gradlew --warning-mode=all コマンドを実行すると、今度は何も出ませんでした。

f:id:ksby:20180711132753p:plain

clean タスク実行 → Rebuild Project → build タスクを実行すると BUILD SUCCESSFUL のメッセージが出ましたが、Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0. のメッセージがまた出ました。。。

f:id:ksby:20180711234228p:plain

コマンドラインから gradlew -Dfile.encoding=UTF-8 --warning-mode=all build コマンドを実行してみます。

f:id:ksby:20180711235526p:plain

Doma 2 と Lombok の annotaion processor が compile classpath にあるのは Gradle 5.0 から非推奨になるので、Please add them to the annotation processor path instead. ということらしいです。何のことか分からなかったので調べてみたところ、以下のページを見つけました。annotaion processorannotationProcessor で指定することになったようです。あと compile(Deprecated) とかありますね。。。

compile の方は一旦無視して annotationProcessor の方から反映してみます。build.gradle の以下の点を変更します。

dependencies {
    ..........

    // for lombok
    annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    compileOnly("org.projectlombok:lombok:${lombokVersion}")

    // for Doma
    annotationProcessor("org.seasar.doma:doma:${domaVersion}")
    compile("org.seasar.doma:doma:${domaVersion}")
    domaGenRuntime("org.seasar.doma:doma-gen:${domaVersion}")
    domaGenRuntime("com.h2database:h2:1.4.192")
  • annotationProcessor("org.projectlombok:lombok:${lombokVersion}") を追加します。
  • testCompileOnly("org.projectlombok:lombok:${lombokVersion}") を削除します。
  • annotationProcessor("org.seasar.doma:doma:${domaVersion}") を追加します。

gradlew -Dfile.encoding=UTF-8 --warning-mode=all build コマンドを実行しますが、まだ警告が出たままでした。Lombok はメッセージに出なくなりましたが、Doma 2 の方が出たままですね。Doma 2 はさすがに compilecompileOnly に変更する訳にもいかないので、ここまでにします。

f:id:ksby:20180713003051p:plain

build.gradle で compileimplementation に変更する

Gradle の compile, api, implementation とかについて という記事を見つけました。やっぱり非推奨になったようです。

ライブラリではないので api を使用する必要はなさそうなので、build.gradle で以下のように変更します。

  • compileimplementation
  • runtimeruntimeOnly
  • testCompiletestImplementation
dependencies {
    def spockVersion = "1.1-groovy-2.4"
    def domaVersion = "2.19.1"
    def lombokVersion = "1.16.20"
    def errorproneVersion = "2.2.0"
    def powermockVersion = "1.7.3"
    def seleniumVersion = "3.9.1"

    // dependency-management-plugin によりバージョン番号が自動で設定されるもの
    // Appendix F. Dependency versions ( https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/html/appendix-dependency-versions.html ) 参照
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf") {
        exclude group: "org.codehaus.groovy", module: "groovy"
    }
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-freemarker")
    implementation("org.springframework.boot:spring-boot-starter-mail")
    implementation("org.springframework.boot:spring-boot-starter-security")
    implementation("org.springframework.boot:spring-boot-devtools")
    implementation("org.springframework.session:spring-session")
    implementation("org.codehaus.janino:janino")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.security:spring-security-test")
    testImplementation("org.yaml:snakeyaml")
    testImplementation("org.mockito:mockito-core")

    // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの
    implementation("com.integralblue:log4jdbc-spring-boot-starter:1.0.2")
    implementation("org.flywaydb:flyway-core:5.0.7")
    implementation("com.h2database:h2:1.4.192")
    implementation("com.github.rozidan:modelmapper-spring-boot-starter:1.0.0")
    implementation("com.google.guava:guava:22.0")
    implementation("org.apache.commons:commons-lang3:3.7")
    testImplementation("org.dbunit:dbunit:2.5.4")
    testImplementation("com.icegreen:greenmail:1.5.7")
    testImplementation("org.assertj:assertj-core:3.9.1")
    testImplementation("org.spockframework:spock-core:${spockVersion}")
    testImplementation("org.spockframework:spock-spring:${spockVersion}")
    testImplementation("com.google.code.findbugs:jsr305:3.0.2")
    testImplementation("org.jsoup:jsoup:1.11.2")
    testImplementation("com.icegreen:greenmail:1.5.7")

    // for lombok
    annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
    compileOnly("org.projectlombok:lombok:${lombokVersion}")

    // for Doma
    annotationProcessor("org.seasar.doma:doma:${domaVersion}")
    implementation("org.seasar.doma:doma:${domaVersion}")
    domaGenRuntime("org.seasar.doma:doma-gen:${domaVersion}")
    domaGenRuntime("com.h2database:h2:1.4.192")

    // for Error Prone ( http://errorprone.info/ )
    errorprone("com.google.errorprone:error_prone_core:${errorproneVersion}")
    compileOnly("com.google.errorprone:error_prone_annotations:${errorproneVersion}")

    // PowerMock
    testImplementation("org.powermock:powermock-module-junit4:${powermockVersion}")
    testImplementation("org.powermock:powermock-api-mockito:${powermockVersion}")

    // for Geb + Spock
    testImplementation("org.gebish:geb-spock:2.1")
    testImplementation("org.seleniumhq.selenium:selenium-chrome-driver:${seleniumVersion}")
    testImplementation("org.seleniumhq.selenium:selenium-firefox-driver:${seleniumVersion}")
    testImplementation("org.seleniumhq.selenium:selenium-support:${seleniumVersion}")
    testImplementation("org.seleniumhq.selenium:selenium-api:${seleniumVersion}")
    testImplementation("org.seleniumhq.selenium:selenium-remote-driver:${seleniumVersion}")
}

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project → build タスクを実行して BUILD SUCCESSFUL のメッセージが出ることを確認します。

f:id:ksby:20180714081908p:plain

Checkstyle を 8.8 → 8.11、PMD を 6.4.0 → 6.5.0 へバージョンアップする

build.gradle の以下の点を変更します。

checkstyle {
    configFile = file("${rootProject.projectDir}/config/checkstyle/google_checks.xml")
    toolVersion = '8.11'
    sourceSets = [project.sourceSets.main]
}

..........

pmd {
    toolVersion = "6.5.0"
    sourceSets = [project.sourceSets.main]
    ignoreFailures = true
    consoleOutput = true
    ruleSetFiles = rootProject.files("/config/pmd/pmd-project-rulesets.xml")
    ruleSets = []
}
  • checkstyletoolVersion = '8.8'toolVersion = '8.11' に変更します。
  • pmd で toolVersion = "6.4.0"toolVersion = "6.5.0" に変更します。

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project → build タスクを実行して BUILD SUCCESSFUL のメッセージが出ることを確認します。

f:id:ksby:20180714084434p:plain f:id:ksby:20180714084545p:plain

error-prone を 2.2.0 → 2.3.1 へバージョンアップする

gradle-errorprone-plugin を見ると最新バージョンは 0.0.14、mvnrepository.com の error_prone_core のページ を見ると最新バージョンは 2.3.1 でした。

build.gradle の以下の点を変更します。

plugins {
    id "java"
    id "eclipse"
    id "idea"
    // plugins {} block 内では ${springBootVersion} が使用できないので、バージョンを直接記述している
    id "org.springframework.boot" version "1.5.10.RELEASE"
    id "groovy"
    id "net.ltgt.errorprone" version "0.0.14"
    id "checkstyle"
    id "findbugs"
    id "pmd"
    id "com.moowork.node" version "1.2.0"
}

..........

dependencies {
    def spockVersion = "1.1-groovy-2.4"
    def domaVersion = "2.19.1"
    def lombokVersion = "1.16.20"
    def errorproneVersion = "2.3.1"
    def powermockVersion = "1.7.3"
    def seleniumVersion = "3.9.1"

    ..........
  • id "net.ltgt.errorprone" version "0.0.13"id "net.ltgt.errorprone" version "0.0.14" に変更します。
  • def errorproneVersion = "2.2.0"def errorproneVersion = "2.3.1" に変更します。

Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project → build タスクを実行して BUILD SUCCESSFUL のメッセージが出ることを確認します。今回はエラーは出ませんでした。

f:id:ksby:20180714094057p:plain f:id:ksby:20180714094213p:plain

また build.gradle で以下の定義を記述していますが、

compileJava.options.compilerArgs += [
        '-Xep:RemoveUnusedImports:WARN'
        , '-Xep:NestedInstanceOfConditions:OFF'
        , '-Xep:InstanceOfAndCastMatchWrongType:OFF'
        , '-Xep:ParameterName:OFF'
]

, '-Xep:NestedInstanceOfConditions:OFF', '-Xep:InstanceOfAndCastMatchWrongType:OFF'コメントアウトしてもエラーは出なかったので削除します。

履歴

2018/07/14
初版発行。