Spring Boot JSF打包为JAR

时间:2015-04-05 19:07:09

标签: java spring jsf gradle spring-boot

我正在尝试使用jsf和gradle创建一个spring boot应用程序。

到目前为止,在开发过程中一切都很好。当我想运行我的应用程序时,我只输入了gradle bootRun,应用程序启动了,我可以在' localhost'。

下访问它。

现在我处于某个时间点,我想部署应用程序,因此我运行命令' gradle clean distTar'这将创建要部署的tar文件。

运行生成的脚本并通过浏览器访问我的应用程序后,我只得到一条带有消息的404。

index.xhtml Not Found in ExternalContext as a Resource

同样在jar文件中,没有包含任何html文件。我用命令

将它们包含在jar中
from ("${projectDir}/src/main/webapp/"){
    into('resources')
}

参考https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot 这个文件应该是可访问的。但仍然没有改变。

还有其他人有线索吗?我做错了什么?

BR

3 个答案:

答案 0 :(得分:1)

我一直在努力解决这个问题,最终设法提出了一个有效的解决方案。

如下所述: https://stackoverflow.com/a/9473487/4250114如果您使用Servlet3.x(并且您可能使用的是SpringBoot)。

对于我来说,maven中的结构看起来像下面的工作:

 src 
   |-main
     | ...
     |-resources
        |-META-INF
           |-faces-config.xml
           |-resources
               |-test.xhtml

所以在jar中它应该是:

|-META-INF
    |-faces-config.xml
    |-resources
        |-test.xhtml

答案 1 :(得分:0)

  

按照给定的结构创建胖罐

Demo
└── src
|    ├── main
|    │   ├── java
|    │   │     └── org
|    │   │          └── demo
|    │   │                └── App.java
|    │   └── resources
|    |       |
|    │       └── application.properties
|    |       |
|    |       └── META-INF
|    |       |        └── resources
|    |       |                 └── jsp
|    |       └── static
|    |              └── css
|    |              └── js
|    |    
|    └── test
|         └── java
|               └── org
|                    └── demo
|                          └── App.java  
├──── pom.xml

答案 2 :(得分:0)

基于https://github.com/spring-projects/spring-boot/issues/8299的信息,也基于SpringBoot + Jetty的输出

2018-01-15 15:57:03 [main] INFO  o.j.jetty.JsfJettyServerCustomizer - Setting Jetty classLoader to META-INF/resources directory

我在Gradle文件中使用了这个:

jar {
    baseName = 'csm'
    version = "0.0.1-SNAPSHOT"

    from("build/docs/"){
        into("generated/docs/")
    }
    from("src/main/resources/"){
        include("**")
    }
    // JSF and SpringBoot and Jetty require all webapp files to be in a very particular location.
    // See: https://github.com/spring-projects/spring-boot/issues/8299
    from ("${projectDir}/src/main/webapp/"){
        into('META-INF/resources')
    }
}

/BOOT-INF
/META-INF/
   /resources/
      /WEB-INF/
         web.xml
      index.jsf
      blah.xhtml