SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

STS、Spring Bootをバージョンアップして、thymeleafを3.0系に変更する。ついでにJava8DateTime対応も。

STS 3.8.3+SpringBoot 1.5.1+thymeleaf 2.1の組み合わせでやってきましたが、調べた感じ、安定版としてはSpringBootが1.5.4、thymeleafは3.02が最新っぽいので、それにしてみようと思います。 

 

2018/03/03追記

>STS3.9.2 SpringBoot2.0.0 または 1.5.10になってました。

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

github.com

 

2017/12/04追記

>SpringBoot1.5.1→1.5.4の時はうまく行ったのですが、1.5.8以上に上げるときにハマりました。

>こちらの記事でハマりどころと対処法を書いてます。

arakan-pgm-ai.hatenablog.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/>にしないと、例外で落ちてましたけど、実行したら、すんなり通りました。 

問題なさそうですね。