首页 > 解决方案 > Spring boot JSF可执行JAR找不到xhtml文件

问题描述

我的问题是我的 Spring Boot JSF 应用程序可以在 IntelliJ 中运行,但不能作为可执行 JAR。应用程序启动时没有问题,但它无法解析 xhtml 模板。在 IntelliJ 中,一切都按预期工作。

我发现这个问题是关于类似问题的。我面向文件结构,看不出有什么区别。

Spring Boot JSF 打包为 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 文件的结构应该如何?

标签: spring-bootmavenjsfxhtmlexecutable-jar

解决方案


我在将 JSF 页面打包到可执行 jar 时遇到了同样的问题。还有其他与该问题相关的 SO 主题(对我没有帮助):

我最终将项目转换为war。希望spring-boot-maven-plugin支持可执行的战争。

  1. <packaging>war</packaging>在 pom.xml 中指定。
  2. 我不得不<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. _


推荐阅读