我使用Spring Boot构建了一个Restful API,并且我使用Maven将其部署为可执行的Jar文件。构建我的POM文件的部分如下;
<build>
<finalName>project-name</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我已经将Thymeleaf添加到我的项目中,因为我需要显示一个HTML文件。我没有在application.properties文件中添加任何其他配置选项。我在文件夹&#39; / src / main / resources / templates /&#39;中创建了一个简单的HTML文件。并且我已经创建了一个控制器来显示HTML文件。
如果我在IntelliJ中运行项目,我可以通过控制器查看HTML文件。 如果我使用&m; mvn spring-boot:run&#39;运行项目,我可以查看HTML文件。通过控制器。 但是,当我从maven创建的可执行Jar文件中运行项目后,我无法查看HTML文件。
当从可执行jar运行项目时,我在启动时看到以下输出;
18:18:38.234 [main] WARN o.s.b.a.t.AbstractTemplateResolverConfiguration - Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
我假设它无法找到/ templates /文件夹。为了调试问题,我解压缩了可执行jar,我看到了以下文件夹结构;
- BOOT-INF
- classes
- templates
- mails
reset.html
password-reset.html
- lib
- META-INF
- org
我可以清楚地看到模板文件夹与HTML文件一起位于jar中&#39; password-reset.html&#39;。
我似乎也与项目的另一部分有类似的问题,它将文件的内容加载到字符串中。下面的代码再次运行良好,从IntelliJ运行,当通过&mvn spring-boot:run&#39;运行时,但是当从可执行jar运行时它无法加载文件。
Resource resource = new ClassPathResource("templates/mails/reset.html");
BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()), 1024);
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
stringBuilder.append(line).append('\n');
}
br.close();
body = stringBuilder.toString();
当我从可执行jar中运行时,我猜测项目中的类路径(?)存在一些问题。我想知道是否有人知道为什么我会遇到这个问题以及我可以做些什么来解决它?