Spring boot JSF可执行JAR找不到xhtml文件
Posted
技术标签:
【中文标题】Spring boot JSF可执行JAR找不到xhtml文件【英文标题】:Spring boot JSF executable JAR can not find xhtml files 【发布时间】:2021-02-08 22:26:57 【问题描述】:我的 Spring Boot JSF 应用程序可以在 IntelliJ 中运行,但不能作为可执行 JAR 运行。应用程序启动时没有问题,但它无法解析 xhtml 模板。在 IntelliJ 中,一切都按预期工作。
我发现这个问题与类似问题有关。我以文件结构为导向,看不出有什么区别。
Spring Boot JSF packaging as a JAR
我的maven文件结构:
src
| main
| resources
| META-INF
| resources
| index.xhtml
| faces-config.xml
所以当我启动 Spring Boot 应用程序时,它会在目标/类中启动
那里的结构:
target
| classes
| META-INF
| resources
| index.xhtml
| faces-config.xml
在创建的可执行 JAR 中的结构是
org
BOOT-INF
| lib
| classes
| de ...
META-INF
| resources
| index.xhtml
| faces-config.xml
据我了解各种站点和答案,这应该是 jar 中提取 xhtml 文件的正确结构。但这对我不起作用。我出于绝望将 META-INF 目录复制到了 BOOT-INF/classes 目录中,在另一个迭代中,只是将 META-INF 中的资源目录复制到了 BOOT-INF/classes 中。但没有任何效果。它仍然无法解析 xhtml 文件。
我的jar文件的结构应该是怎样的?
【问题讨论】:
【参考方案1】:我在将 JSF 页面打包到可执行 jar 时遇到了同样的问题。还有其他与该问题相关的 SO 主题(对我没有帮助):
Cant deploy Spring Boot application. Error 404 on any page Springboot Whitelabel Error Page with JSF (AWS)我最终将项目转换为 war。 希望spring-boot-maven-plugin 支持可执行的战争。
-
我在 pom.xml 中指定了
<packaging>war</packaging>
。
我不得不从 spring-boot-maven-plugin 配置中删除 <layers><enabled>true</enabled></layers>
。
战争项目结构:
pom.xml
src
└── main
├── java
│ └── xxx
├── resources
│ ├── application.yml
└── webapp
├── xxx.xhtml
└── WEB-INF
└── faces-config.xml
spring-boot-maven-plugin 运行它的repackage
。解压战争结构:
├── META-INF
│ ├── MANIFEST.MF
│ └── maven
│ └── com.fusion
│ └── jsf-application
│ ├── pom.properties
│ └── pom.xml
├── org
│ └── springframework
│ └── boot
│ └── loader
│ ... spring classes here
│ └── WarLauncher.class
├── xxx.xhtml
└── WEB-INF
├── classes
│ ... project classes
├── faces-config.xml
└── lib
... all the libs
可以使用java -jar jsf-application.war
运行war。
【讨论】:
优秀的答案!我花了几天时间对此进行调查,最终得出了这个结论。但是,如果 xxx.xhtml 文件也可以放在 WEB-INF 下,那就太好了。这对于带有 application.properties 的 jsp 文件是可能的:spring.mvc.view.prefix = /WEB-INF/ 但是对于 JSF 文件(xxx.xhtml)它似乎不起作用......以上是关于Spring boot JSF可执行JAR找不到xhtml文件的主要内容,如果未能解决你的问题,请参考以下文章
spring boot jsp & 可执行 jar 抛出 /error
找不到符号 - Spring Boot Maven 兄弟作为依赖
spring cloudspring boot2.x下 使用feign,注解@EnableFeignClients 找不到的解决方法