spring-boot - Spring boot JSF可执行JAR找不到xhtml文件
问题描述
我的问题是我的 Spring Boot JSF 应用程序可以在 IntelliJ 中运行,但不能作为可执行 JAR。应用程序启动时没有问题,但它无法解析 xhtml 模板。在 IntelliJ 中,一切都按预期工作。
我发现这个问题是关于类似问题的。我面向文件结构,看不出有什么区别。
我的 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 文件的结构应该如何?
解决方案
我在将 JSF 页面打包到可执行 jar 时遇到了同样的问题。还有其他与该问题相关的 SO 主题(对我没有帮助):
我最终将项目转换为war。希望spring-boot-maven-plugin支持可执行的战争。
- 我
<packaging>war</packaging>
在 pom.xml 中指定。 - 我不得不
<layers><enabled>true</enabled></layers>
从 spring-boot-maven-plugin 配置中删除。
战争项目结构:
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
. _
推荐阅读
- c# - 来自同一主应用程序的 ASP.NET Core 管道
- javascript - 当我在 laravel 中单击新窗口时,我的页面没有显示任何内容(*白屏“)
- spring-boot - Spring Boot 2.2.2 RELEASE - 找不到 PropertySource:无法提取响应
- java - 为什么我们需要 notify() 进行线程间通信
- android - AsyncHttpClient() 完成后如何等待和执行代码?
- reactjs - React-Images 和 React-Photo-Gallery 编译错误
- css - 我试图通过将图像左右浮动来将我的文本包裹在我的图像周围,但没有任何反应
- linux - 关于在Linux中设置环境变量的简单问题
- python - Anaconda Navigator 未在 Windows 10 中启动
- r - 如何通过R中的变量计算疾病流行率