在 Eclipse 中工作正常,但如果作为 jar 运行,则“找不到模板”

Posted

技术标签:

【中文标题】在 Eclipse 中工作正常,但如果作为 jar 运行,则“找不到模板”【英文标题】:Work fine in eclipse but "Can't find template" if run as jar 【发布时间】:2019-02-25 09:10:35 【问题描述】:

该程序在带有 IDE 的 Windows 中运行良好,但是当我发布到 jar 并在 Ubuntu 中运行它时,它不会呈现 html

来源:

@Controller
@EnableAutoConfiguration
@RequestMapping("/")
public class JumanController 

    @GetMapping("/")
    public String index(Model model) 
        return "index";
    

...

主要:

@SpringBootApplication
public class App 

    public static void main( String[] args )
    
        TomcatURLStreamHandlerFactory.disable();
        SpringApplication.run(JumanController.class, args);
    

HTML:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
...

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    ...

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>
    </dependencies>

</project>

设置:

spring.thymeleaf.enabled=true 
spring.thymeleaf.prefix=classpath:/resources/templates/ 

我尝试将prefix 更改为classpath:/templates/,仍然不行。

服务器启动时的警告:

2018-09-21 10:46:47.154 警告 4048 --- [主要] ion$DefaultTemplateResolverConfiguration:找不到模板 位置:类路径:/模板/(请添加一些模板或检查 你的 Thymeleaf 配置)

访问索引时出错:

2018-09-21 10:47:15.253 错误 4048 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-1] 异常处理模板 “index”:解析模板“index”时出错,模板可能不存在或 任何配置的模板解析器都可能无法访问

org.thymeleaf.exceptions.TemplateInputException:错误解决 模板“索引”,模板可能不存在或可能无法访问 由任何已配置的模板解析器

模板目录:

src/main/resources/templates/index.html

为什么要查找路径 src/main/templates/ 而不是 src/main/resources/templates/

我只需要一个简单的Spring boot 包含一个statictemplate 页面,并且可以释放到一个jar 中。我删除了application.properties 想让一切都默认运行(AutoConfiguration),但是结果是一样的。

任何建议或 hello world 演示项目都会有所帮助...

【问题讨论】:

【参考方案1】:

确保您的 application.properties 文件具有以下条目 - spring.thymeleaf.prefix=classpath:/templates/

【讨论】:

【参考方案2】:

已解决:

    将模板目录从 src/main/resources/templates/ 更改为 /resources/templates/。 (与src同级)

    spring.thymeleaf.prefix设置为classpath:/templates/

源码:https://github.com/arkceajin/jumanpp-java

【讨论】:

以上是关于在 Eclipse 中工作正常,但如果作为 jar 运行,则“找不到模板”的主要内容,如果未能解决你的问题,请参考以下文章

Java JDBC 连接 Integrated Security 只能在我的 Eclipse 中工作

Eclipse项目在导出后无法正常工作?

为啥 getResourceAsStream() 可以在 IDE 中工作,但不能在 JAR 中工作?

pyspark 代码在控制台中工作,但不在 zeppelin 中

MQTT 连接在 Node 中工作,但不能作为 ReactJS 组件

函数在代码中工作,但不能作为工作表中的 UDF