如何在单个可运行的 jar 中部署 spring boot jsf 应用程序

Ser*_*ahé 5 jsf spring-boot

我有一个 Spring Boot JSF 应用程序,从 Netbeans IDE 中启动时该应用程序可以正确运行。当我将 Maven 项目打包在一个可运行的 jar 中并询问 URL 时,我遇到以下错误 [java.lang.IllegalStateException: 找不到工厂 javax.faces.context.FacesContextFactory 的备份]。

\n\n

那么在单个可运行的 jar 中部署 spring boot jsf 应用程序的正确方法是什么?我已经在互联网上搜索了 4 个小时来寻找解决方案。徒然。我找到了在 Netbeans 中工作的解决方案,但是当我从中生成一个可运行的 jar 时,它们崩溃了。

\n\n

这是我的环境:

\n\n

[web.xml]

\n\n
    <?xml version="1.0" encoding="UTF-8"?>\n<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">\n  <!-- la servlet FacesServlet -->\n  <servlet>\n    <servlet-name>Faces Servlet</servlet-name>\n    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n    <load-on-startup>1</load-on-startup>\n  </servlet>\n</web-app>\n
Run Code Online (Sandbox Code Playgroud)\n\n

[faces-config.xml]

\n\n
    <?xml version=\'1.0\' encoding=\'UTF-8\'?>\n<faces-config version="2.2"\n              xmlns="http://xmlns.jcp.org/xml/ns/javaee"\n              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">\n  <application>\n    <!-- pour que Spring puisse g\xc3\xa9rer les expression #{expression} dans les pages JSF -->\n    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>\n    <!-- le fichier des messages -->\n    <resource-bundle>\n      <base-name>\n        messages\n      </base-name>\n      <var>msg</var>\n    </resource-bundle>\n    <message-bundle>messages</message-bundle>\n  </application>\n</faces-config>\n
Run Code Online (Sandbox Code Playgroud)\n\n

【引导类】

\n\n
    package web.boot;\n\nimport org.springframework.boot.SpringApplication;\nimport web.config.JsfConfig;\n\npublic class Boot {\n\n  public static void main(String[] args) {\n    SpringApplication.run(JsfConfig.class, args);\n  }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

[配置类]

\n\n
    package web.config;\n\nimport config.MetierDaoJpaConfig;\nimport java.util.concurrent.TimeUnit;\nimport javax.faces.webapp.FacesServlet;\nimport org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;\nimport org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;\nimport org.springframework.boot.web.servlet.ServletRegistrationBean;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.ComponentScan;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.Import;\n\n@Configuration\n@Import({MetierDaoJpaConfig.class})\n@ComponentScan({"web.beans"})\n// ******************************************************************************\n// \xc3\xa0 utiliser conjointement avec [WEB-INF/faces-config.xml et WEB-INF/web.xml]\n// ******************************************************************************\npublic class JsfConfig {\n\n  @Bean\n  public ServletRegistrationBean servletRegistrationBean() {\n    FacesServlet servlet = new FacesServlet();\n    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(servlet,"*.xhtml");\n    return servletRegistrationBean;\n  }\n\n  @Bean\n  public EmbeddedServletContainerFactory servletContainer() {\n    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();\n    factory.setPort(8080);\n    factory.setSessionTimeout(10, TimeUnit.MINUTES);\n    return factory;\n  }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

[pom.xml]

\n\n
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 \n  http://maven.apache.org/maven-v4_0_0.xsd">\n\n  <modelVersion>4.0.0</modelVersion>\n  <groupId>istia.st</groupId>\n  <artifactId>mv-pam-primefaces-multipages-springboot-eclipselink-tomcat-02</artifactId>\n  <packaging>jar</packaging>\n  <version>1.0-SNAPSHOT</version>\n  <name>mv-pam-primefaces-multipages-springboot-eclipselink-tomcat-02</name>\n  <url>http://maven.apache.org</url>\n\n\n  <parent>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-parent</artifactId>\n    <version>1.4.0.RELEASE</version>\n  </parent>\n\n  <dependencies>\n    <!-- JSP API -->\n    <dependency>\n      <groupId>org.apache.tomcat.embed</groupId>\n      <artifactId>tomcat-embed-jasper</artifactId>\n    </dependency>\n    <!-- Spring web -->\n    <dependency>\n      <groupId>org.springframework.boot</groupId>\n      <artifactId>spring-boot-starter-web</artifactId>\n    </dependency>\n\n    <!-- JSF -->\n    <dependency>\n      <groupId>com.sun.faces</groupId>\n      <artifactId>jsf-api</artifactId>\n      <version>2.2.13</version>\n    </dependency>\n    <dependency>\n      <groupId>com.sun.faces</groupId>\n      <artifactId>jsf-impl</artifactId>\n      <version>2.2.13</version>\n    </dependency>\n\n    <!-- https://mvnrepository.com/artifact/org.primefaces/primefaces -->\n    <dependency>\n      <groupId>org.primefaces</groupId>\n      <artifactId>primefaces</artifactId>\n      <version>6.0</version>\n    </dependency>\n\n    <!-- JSR-330 --> \n    <dependency>\n      <groupId>javax.inject</groupId>\n      <artifactId>javax.inject</artifactId>\n      <version>1</version>\n    </dependency>\n\n    <!-- couches basses -->\n    <dependency>\n      <groupId>${project.groupId}</groupId>\n      <artifactId>mv-pam-springboot-eclipselink</artifactId>\n      <version>${project.version}</version>\n    </dependency>\n  </dependencies>\n\n  <build>\n    <plugins>\n      <plugin>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-surefire-plugin</artifactId>\n        <version>2.18.1</version>\n      </plugin>\n      <plugin>\n        <artifactId>maven-assembly-plugin</artifactId>\n        <configuration>\n          <archive>\n            <manifest>\n              <mainClass>web.boot.Boot</mainClass>\n            </manifest>\n          </archive>\n          <descriptorRefs>\n            <descriptorRef>jar-with-dependencies</descriptorRef>\n          </descriptorRefs>\n        </configuration>\n      </plugin>\n    </plugins>\n  </build>\n\n  <properties>\n    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n    <maven.compiler.source>1.8</maven.compiler.source>\n    <maven.compiler.target>1.8</maven.compiler.target>\n  </properties>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n