アラカン"BOKU"のITな日常

文系システムエンジニアの”BOKU”が勉強したこと、経験したこと、日々思うこと。

STSを3.9.0、Spring Bootを1.5.4、thymeleafを3.0系にバージョンアップ。ついでにJava8DateTime対応も。

久々にSTSを立ち上げました。

 

せっかくだから、まず、環境を最新にしておこうかなと思います。

 

ずっと、STS 3.8.3+SpringBoot 1.5.1+thymeleaf 2.1の組み合わせでやってきたわけなんですけど、当時は最新だったそれも、すでに若干古くなってます。

 

調べた感じでは、安定版としてはSpringBootが1.5.4、thymeleafは3.02が最新っぽいので、それにします。

 

バージョンアップで気になるのは、非互換がでて、既存のソースの修正が必要になるかどうかですが、リリースノートを見る限り、その心配をするような変更はなさそうです。

github.com

 

まずはSTSのバージョンアップ

STSeclipseベース)で「更新の確認」を実行します。

f:id:arakan_no_boku:20170724235515j:plain

 

それで表示された候補にチェックして、次へ>次へ>完了とボタンを押していけば、自動的にバージョンアップされます。

f:id:arakan_no_boku:20170724235616j:plain

 

SpringBootとThymeleafのバージョンアップ

今回、一番影響が大きいのは、thymeleafを3.0系にすることです。

 

SpringBootはバージョンをあげて1.5.4にしても、デフォルトだと、thymeleafは2.1系が利用されるみたいなんですね。

 

だから、デフォルトのままにしておくのが手順的には楽なんですが、今回はどうしても、そこをあえて3.0系にしたい理由があります。

 

それは、HTML5でOKな書き方が実行時に例外エラーになることを回避したいからです。

 

実は、ドキュメント(Tutorial: Using Thymeleaf (ja))には、以下のように書いてあります。

HTML5の他に具体的には以下のXHTML仕様をサポート・動作確認しています: “XHTML 1.0 Transitional”、“XHTML 1.0 Strict”、“XHTML 1.0 Frameset”、そして “XHTML 1.1” です。

 

だからHTML5はOK・・と思うとそうでもないわけです。

 

Thymeleafの2.1系を使うと、HTML5で許されるタグを閉じない書き方は、全部エラー(例外が発生して落ちる)になるんですね。

 

例えば、<br>と<hr>なども<br/>、<hr/>と書かないといけません。

 

HTMLではなくXHTMLとしてパースしているのが原因みたいです。 

 

これが編集中にエラーになるなら、まだいいんですが、実行時でないとエラーがでないので、閉じてないタグが複数あると・・・ちょっとだけ・・面倒でした。

 

それが、3.0系にすれば解消されるらしいと、ネットの情報があったのですね。

 

それならば、試してみる価値は十分にあるかなと。

 

Mavenベースでやっているので、バージョンアップ自体は簡単です。

 

pom.xmlを以下のように赤字の部分を書き換えるだけです。

 

まず、SpringBootを1.5.4にします。 

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

 

次はThymeleafを3.0.2にします。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties> 

 

ついでに、Thymeleafのテンプレートファイル内で、Java8のDate And Time APIのクラスを正しく使えるようにしておきます。

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

 

Thymeleafはデフォルトでは、Java8のDate And Time APIを正しく使えないから、extrasで提供されているこれを組み込まないといけないのです。

 

今までは、テンプレート内で使わなかったので、必要なかったのですが、今後使うかもしれないので、念のためです。

 

ここまでで、pom.xmlは終わりです。

 

続けて、src/main/resourcesフォルダのapplication.properties に以下の一行を追記します。

spring.thymeleaf.mode: HTML 

 

こうすることで、Thymeleafの3.0系で、XHTMLではなく、HTMLで解釈してくれるようになります。

 

これで良し・・と。

 

STSで自動ビルドがはしったら、Mavenの依存関係も更新されているみたいだし、特にソースでエラーもでないから、大丈夫そうです。

f:id:arakan_no_boku:20170725002059j:plain

 

最後に、以前はエラーになっていたHTMLの書き方が通るかを試してみます。

 

試すのは、以下の2パターンです。

<meta charset="UTF-8">

<br>

 

2.1系のときなら、</meta>をつけて、<br/>にしないと、例外で落ちてましたけど、実行したら、すんなり通りました。

 

問題なさそうですね。

 

f:id:arakan_no_boku:20170725215801j:plain