Simple Question:
I've started isolating my project inside Java 9 modules, then I've got this error:
Error resolving template [carrinho/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers
My sample project with the problem:
https://github.com/danilobatistaqueiroz/spring-boot-thymeleaf-java9-modules
More Detailed:
Running: ./mvnw spring-boot:run and accessing: http://localhost:8080/carrinho works fine, using or not Java 9 modules.

When testing using mvn install without modules-info.java it works.
module-info.test
--add-opens
java.base/java.util=ALL-UNNAMED
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-modules
jdk.unsupported,org.assertj.core,org.junit.jupiter.params,org.mockito,net.bytebuddy,spring.core,thymeleaf,thymeleaf.spring6,spring.webmvc,org.apache.tomcat.embed.core
--add-reads
com.example=org.mockito
--add-reads
com.example=spring.beans
--add-reads
com.example=spring.core
--add-reads
com.example=spring.context
--add-reads
com.example=org.assertj.core
--add-reads
com.example=org.junit.jupiter.api
--add-reads
com.example=org.junit.jupiter.engine
--add-reads
com.example=net.bytebuddy
--add-reads
com.example=thymeleaf
--add-reads
com.example=thymeleaf.spring6
--add-reads
com.example=spring.webmvc
--add-reads
com.example=org.apache.tomcat.embed.core
--add-reads
com.example=lombok
--add-reads
com.example=spring.web
--add-opens
com.example/com.test.controller=org.junit.platform.commons
--add-opens
com.example/com.test.controller=spring.core
--add-opens
com.example/com.test.controller=thymeleaf
--add-opens
com.example/com.test.controller=thymeleaf.spring6
--add-opens
com.example/com.test.controller=spring.webmvc
--add-opens
com.example/com.test.controller=org.apache.tomcat.embed.core
--add-opens
com.example/com.test.controller=spring.web
CarrinhoController.java
@Controller
public class CarrinhoController {
@GetMapping(value = {"/carrinho"})
public String carrinho(Model model) {
model.addAttribute("title", "Carrinho");
model.addAttribute("voucherCodigo", 3842);
model.addAttribute("valorDesconto", 111);
model.addAttribute("carrinho", new CarrinhoViewModel("Devio",new BigDecimal(10),"454545454545",new BigDecimal(30)));
return "carrinho/index.html";
}
CarrinhoTests.java
@ContextConfiguration(classes=DemoApplication.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class CarrinhoTests {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Test
void greetingShouldReturnDefaultMessage() throws Exception {
System.out.println(this.restTemplate);
assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/carrinho", String.class)).contains("Produto");
}
}
[ERROR] org.thymeleaf.exceptions.TemplateInputException: Error resolving template [carrinho/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers
[ERROR] at [email protected]/org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607) ~[thymeleaf-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103) ~[thymeleaf-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077) ~[thymeleaf-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372) ~[thymeleaf-spring6-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192) ~[thymeleaf-spring6-3.1.2.RELEASE.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1431) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1167) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1106) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.3.jar:na]
[ERROR] at [email protected]/jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at [email protected]/org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.18.jar:na]
[ERROR] at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
[ERROR]
[ERROR] .
[ERROR] '-- JUnit Jupiter [OK]
[ERROR] +-- DemoApplicationTests [OK]
[ERROR] | '-- contextLoads [OK]