Spring boot JSF可执行JAR找不到xhtml文件

Mar*_*arc 2 xhtml jsf executable-jar maven spring-boot

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

我发现这个问题涉及类似的问题。我查看了文件结构,看不出有什么区别。

Spring Boot JSF 打包为 JAR

我的maven文件结构:

  src
   | main
      | resources
           | META-INF
               | resources
                    | index.xhtml
               | faces-config.xml
Run Code Online (Sandbox Code Playgroud)

因此,当我启动 Spring Boot 应用程序时,它将在目标/类处获取

那里的结构是:

 target
   | classes
        | META-INF
             | resources
                  | index.xhtml
             | faces-config.xml
Run Code Online (Sandbox Code Playgroud)

在创建的可执行 JAR 中,结构为

  org
  BOOT-INF
     | lib
     | classes
         | de ...
  META-INF
     | resources
         | index.xhtml
     | faces-config.xml
Run Code Online (Sandbox Code Playgroud)

据我了解各种网站和答案,这应该是 jar 中获取 xhtml 文件的正确结构。但这对我不起作用。出于无奈,我将 META-INF 目录复制到 BOOT-INF/classes 目录中,并在另一次迭代中将 META-INFO 中的资源目录复制到 BOOT-INF/classes 中。但没有任何作用。它仍然无法解析 xhtml 文件。

我的 jar 文件的结构应该如何?

Pet*_*rov 5

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

\n\n

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

\n
    \n
  1. 我在pom.xml中指定<packaging>war</packaging>
  2. \n
  3. 我必须<layers><enabled>true</enabled></layers>从 spring-boot-maven-plugin 配置中删除。
  4. \n
\n

战争项目结构:

\n
 pom.xml\n src\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main\n     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 java\n     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 xxx\n     \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 resources\n     \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 application.yml\n     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 webapp\n         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 xxx.xhtml\n         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WEB-INF\n             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 faces-config.xml\n\n
Run Code Online (Sandbox Code Playgroud)\n

spring-boot-maven-plugin 运行其repackage. 解压后的战争结构:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 META-INF\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.MF\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 maven\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 com.fusion\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 jsf-application\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pom.properties\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pom.xml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 org\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 springframework\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 boot\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 loader\n\xe2\x94\x82\xc2\xa0\xc2\xa0             ... spring classes here\n\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WarLauncher.class\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 xxx.xhtml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 WEB-INF\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 classes\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 ... project classes \n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 faces-config.xml\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib\n        ... all the libs\n\n\n
Run Code Online (Sandbox Code Playgroud)\n

可以使用 来发动战争java -jar jsf-application.war

\n