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になってました。
バージョンアップで気になるのは、非互換がでて、既存のソースの修正が必要になるかどうかですが、リリースノートを見る限り、その心配をするような変更はなさそうです。
2017/12/04追記
>SpringBoot1.5.1→1.5.4の時はうまく行ったのですが、1.5.8以上に上げるときにハマりました。
>こちらの記事でハマりどころと対処法を書いてます。
STSのバージョンアップ
STS(eclipseベース)で「更新の確認」を実行します。
それで表示された候補にチェックして、次へ>次へ>完了とボタンを押していけば、自動的にバージョンアップされます。
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の依存関係も更新されているみたいだし、特にソースでエラーもでないから、大丈夫そうです。
最後に、以前はエラーになっていたHTMLの書き方が通るかを試してみます。
試すのは、以下の2パターンです。
<meta charset="UTF-8">
<br>
2.1系のときなら、</meta>をつけて、<br/>にしないと、例外で落ちてましたけど、実行したら、すんなり通りました。
問題なさそうですね。