かんがるーさんの日記

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

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その53 )( Gradle を 3.5 → 4.6 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot + npm + Geb で入力フォームを作ってテストする ( その52 )( 入力画面3を作成する5 ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Gradle を 3.5 → 4.6 へバージョンアップします。

参照したサイト・書籍

目次

  1. build タスク実行時に出たエラーを解消する
    1. 'The String literal "セ??トされるはず?????ータがセ??トされて??ません" appears 5 times in this file; the first occurrence is on line 91'
  2. Gradle を 3.5 → 4.6 へバージョンアップする

手順

build タスク実行時に出たエラーを解消する

Gradle のバージョンアップの前に clean タスク実行 → Rebuild Project 実行 → build タスクを実行したところ、PMD の警告が出ていたので解消します。

f:id:ksby:20180527161213p:plain

'The String literal "セ??トされるはず?????ータがセ??トされて??ません" appears 5 times in this file; the first occurrence is on line 91'

src/main/java/ksbysample/webapp/bootnpmgeb/web/inquiry/InquiryInputController.java の中で throw new IllegalArgumentException("セットされるはずのデータがセットされていません"); とエラーメッセージの文字列を直接記述していたのが原因なので、定数文字列に変更します。

src/main/resources/messages_ja_JP.properties の以下の点を変更します。

InquiryInputController.validate.form.error=セットされるはずのデータがセットされていません
InquiryInput02Form.zipcode.UnmatchPattern=郵便番号が数字7桁ではありません。
..........
  • InquiryInputController.validate.form.error=セットされるはずのデータがセットされていません を追加します。

https://github.com/ksby/ksbysample-webapp-lending/blob/1.0.x/src/main/java/ksbysample/webapp/lending/helper/message/MessagesPropertiesHelper.java をコピーして src/main/java/ksbysample/webapp/bootnpmgeb/helper/message/MessagesPropertiesHelper.java に配置します。

src/main/java/ksbysample/webapp/bootnpmgeb/web/inquiry/InquiryInputController.java の以下の点を変更します。

@Slf4j
@Controller
@RequestMapping("/inquiry/input")
@SessionAttributes("sessionData")
public class InquiryInputController {

    ..........

    private static final String VALIDATE_FORM_ERROR = "InquiryInputController.validate.form.error";

    private final ModelMapper modelMapper;

    private final InquiryInput02FormValidator inquiryInput02FormValidator;

    private final Validator mvcValidator;

    private final MessagesPropertiesHelper mph;

    /**
     * コンストラクタ
     *
     * @param modelMapper                 {@link ModelMapper} オブジェクト
     * @param inquiryInput02FormValidator {@link InquiryInput02FormValidator} オブジェクト
     * @param mvcValidator                {@link Validator} オブジェクト
     * @param mph                         {@link MessagesPropertiesHelper} オブジェクト
     */
    public InquiryInputController(ModelMapper modelMapper
            , InquiryInput02FormValidator inquiryInput02FormValidator
            , Validator mvcValidator
            , MessagesPropertiesHelper mph) {
        this.modelMapper = modelMapper;
        this.inquiryInput02FormValidator = inquiryInput02FormValidator;
        this.mvcValidator = mvcValidator;
        this.mph = mph;
    }

    ..........

    /**
     * 入力画面1 「次へ」ボタンクリック時の処理
     *
     * @return 入力画面2の URL
     */
    @PostMapping(value = "/01", params = {"move=next"})
    public String input01MoveNext(@Validated InquiryInput01Form inquiryInput01Form
            , BindingResult bindingResult
            , SessionData sessionData
            , UriComponentsBuilder builder) {
        if (bindingResult.hasErrors()) {
            bindingResult.getAllErrors().stream().forEach(e -> log.warn(e.getCode()));
            throw new IllegalArgumentException(mph.getMessage(VALIDATE_FORM_ERROR, null));
        }

        ..........
    }

    ..........
  • private static final String VALIDATE_FORM_ERROR = "InquiryInputController.validate.form.error"; を追加します。
  • private final MessagesPropertiesHelper mph; を追加します。
  • コンストラクタの引数に MessagesPropertiesHelper mph を、メソッド内に this.mph = mph; を追加します。
  • throw new IllegalArgumentException("セットされるはずのデータがセットされていません");throw new IllegalArgumentException(mph.getMessage(VALIDATE_FORM_ERROR, null)); に変更します(全部で5ヶ所)。

clean タスク実行 → Rebuild Project 実行 → build タスクを実行して PMD の警告が出力されなくなったことを確認します(画面キャプチャは省略します)。

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

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

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

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

f:id:ksby:20180527171636p:plain

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

f:id:ksby:20180527171841p:plain

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

必ず失敗させているテストが1つあるので無効にします。src/test/groovy/ksbysample/webapp/bootnpmgeb/web/inquiry/InquiryInputControllerTest.groovy の以下の点を変更します。

/*
        @Test
        void "項目全てに入力して次へボタンをクリックすると確認画面へ遷移し、前の画面へ戻るボタンを押して入力画面3へ戻ると以前入力したデータがセットされて表示される"() {
            expect:
            assert false, "確認画面を実装してからテストを作成する"
        }
*/
  • void "項目全てに入力して次へボタンをクリックすると確認画面へ遷移し、前の画面へ戻るボタンを押して入力画面3へ戻ると以前入力したデータがセットされて表示される"() { ... } のテストをコメントアウトします。

clean タスク実行 → Rebuild Project → build タスクを実行します。。。が findbugsMain タスクでエラーになりました。

f:id:ksby:20180527173252p:plain

エラーが発生している Build file 'C:\project-springboot\ksbysample-boot-miscellaneous\boot-npm-geb-sample\build.gradle' line: 87 は以下の部分で、> No signature of method: org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.exclude() is applicable for argument types: (java.lang.String) values: [**/*.properties] というエラーメッセージが出ています。

f:id:ksby:20180527173523p:plain

tasks.withType(FindBugs) { ... }doFirst { ... } の部分はさすがに Gradle 4.x 以降になったら不要になっていると思いたいので、一旦削除してみます。

tasks.withType(FindBugs) {
    reports {
        xml.enabled = false
        html.enabled = true
    }
}

clean タスク実行 → Rebuild Project → build タスクを実行すると、今度は BUILD SUCCESSFUL のメッセージが出力されました。

f:id:ksby:20180527175209p:plain

コンソールに出力されていた https://docs.gradle.org/4.6/userguide/command_line_interface.html#sec:command_line_warnings を見ると、By default, Gradle won’t display all warnings (e.g. deprecation warnings). という記述がありました。これで FindBugs Plugin の warnings が出なくなっているようです。Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0. のメッセージが出ていますが、 5.0 にバージョンアップする時にまた考えることにします。

問題なさそうですので、このまま 4.6 を使います。src/test/groovy/ksbysample/webapp/bootnpmgeb/web/inquiry/InquiryInputControllerTest.groovy のコメントアウトしたテストは元に戻します。

履歴

2018/05/27
初版発行。