jarからSpringBootを実行するとtymeleafでエラー(TemplateInputException)が出たので解決方法をメモ

SpringBootの開発環境(IDE)で実行しているときは、エラーが出ていたなかったのに、jar形式にして実行したら急にエラーが出るようになりました。

そのときの解決方法を載せておきます。

SpringBootのjar実行環境

私のSpringBootの実行環境は以下の通りです。

Javaのバージョン:1.8
SpringBootのバージョン:2.2.0
OS:windows10, ubuntu18

SpringBootのjarから実行したときに発生したtymeleafエラーの発生状況

SpringBootの作成したプログラムをjarにして実行するときに、下記のエラーがtymeleafで発生しました。

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: “class path resource [templates/login.html]”)
~省略~
Caused by: org.attoparser.ParseException: Error resolving template [/login-frag.html], template might not exist or might not be accessible by any of the configured Template Resolvers (template: “login” – line 16, col 13)
~省略~
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/login-frag.html], template might not exist or might not be accessible by any of the configured Template Resolvers (template: “login” – line 16, col 13)

tymeleafテンプレートに対して、他のtymeleafテンプレートを部品化して埋め込んでいる場所でエラーが発生していました。

“template might not exist or might not be accessible by any of the configured Template Resolvers” と言われていますが、テンプレートは存在しているし、特にリゾルバーなんて触っていないのにどういうことだろう? という状況でした。

SpringBootのjarから実行したときに発生したtymeleafエラーの原因と解決方法

原因と解決方法に関しては、
https://codeday.me/jp/qa/20190330/500468.html
https://github.com/spring-projects/spring-boot/issues/1744
に書かれていることを参考にしました。

原因に関しては、JDKの問題のように書かれています。

ロースキルの私には、よくわかりませんでした。

ただ、どうもスラッシュがあるtymeleafのテンプレートを扱うときに、問題が発生するんだなと読み取りました。

結論としては、私の場合はthymeleafテンプレートの
th:replace=”/login-frag.html::hoge” のように読み込んでいる箇所を

th:replace=”login-frag.html::hoge” のように
“/”をなくせばエラーは解消しました。

“/”をなくしても、jar実行ではなく、IDE実行のときも問題なく動作しました。

タイトルとURLをコピーしました