【问题标题】:Spring boot JSF executable JAR can not find xhtml filesSpring boot JSF可执行JAR找不到xhtml文件
【发布时间】: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文件的结构应该是怎样的?

【问题讨论】:

    标签: spring-boot maven jsf xhtml executable-jar


    【解决方案1】:

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

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

    1. 我在 pom.xml 中指定了<packaging>war</packaging>
    2. 我不得不从 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)它似乎不起作用......
    猜你喜欢
    • 2014-11-28
    • 2018-05-26
    • 2016-11-16
    • 2016-12-01
    • 2015-09-09
    • 2014-12-18
    • 2016-04-03
    • 2011-05-06
    • 2013-06-30
    相关资源
    最近更新 更多