我在src / main / resources / template下构建了一个带有单个home.html文件的spring-boot webapp,当我从spring控制器返回"home"时,它运行得很好 . 我是'm packaging it as a war and it runs wonderfully with spring-boot'的嵌入式tomcat服务器 . 如果我用 mvn spring-boot:run
运行它,那就是 .
但是后来如果我用 java -jar myjar.war
启动我的应用程序它声称服务器已经启动并且一切都很好,但是当我尝试在localhost:8080访问它时它失败了:
Error resolving template "home", template might not exist or might not be accessible by any of the configured Template Resolvers
那么我接下来要做什么呢?
顺便说一句,这是我的pom.xml:
<groupId>com.ciber</groupId>
<artifactId>energyworx-conversion-tool</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<properties>
<java.version>1.7</java.version>
<start-class>com.ciber.ewct.WebApp</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<!-- <jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000</jvmArguments> -->
</configuration>
</plugin>
</plugins>
</build>
在打开调试日志记录级别之后,我看到了关于百万美元配置的内容,这与我使用 mvn spring-boot:run
和 java -jar
运行时的情况相同:
[THYMELEAF] * Cache Factory implementation: org.thymeleaf.cache.StandardCacheManager
[THYMELEAF] * Template modes:
[THYMELEAF] * LEGACYHTML5
[THYMELEAF] * XHTML
[THYMELEAF] * HTML5
[THYMELEAF] * VALIDXML
[THYMELEAF] * VALIDXHTML
[THYMELEAF] * XML
[THYMELEAF] * Template resolvers (in order):
[THYMELEAF] * org.thymeleaf.templateresolver.TemplateResolver
[THYMELEAF] * Message resolvers (in order):
[THYMELEAF] * org.thymeleaf.spring4.messageresolver.SpringMessageResolver
[THYMELEAF] * Dialect [1 of 2]: org.thymeleaf.spring4.dialect.SpringStandardDialect
[THYMELEAF] * Prefix: "th"
[THYMELEAF] * Dialect [2 of 2]: nz.net.ultraq.thymeleaf.LayoutDialect
[THYMELEAF] * Prefix: "layout"
[THYMELEAF] TEMPLATE ENGINE CONFIGURED OK
2 回答
我很遗憾地说你实际上做错了 .
您已将构建配置为从包中排除Web应用程序服务器 .
通过此设置,您可以在现有Servlet容器中部署战争 . 您将无法使用
java -jar
命令启动应用程序 .如果您想使用java命令行运行webapp . 将包装更换为
jar
并从您的pom中删除provided
指令 .然后你的jar里面会有一个嵌入式tomcat,命令
java -jar myjar.jar
会正常 .编辑:最后,我会提高Spring Web包的日志级别,以查看模板解析器如何尝试查找模板 .
问候,丹尼尔
我似乎已经修复了它,在@ DanielLavoie的帮助下,通过恢复我为使应用程序成为可部署的战争所做的所有更改 .
那些是:
删除
<packaking>war</packaging>
,以便生成jar;从依赖spring-boot-starter-tomcat中删除
<scope>provided</scope>
;从我的
Application
类中删除extends SpringBootServletInitializer
;我不喜欢这个解决方案因为根据the documentation我跟着你'd be able to make the war deployable and also standalone enabled. But it'我现在必须做 .