Spring Boot的JHipster WAR工件重命名为JAR不会运行

时间:2018-08-27 20:02:32

标签: java maven spring-boot jhipster

我创建了一个空的,整体的JHipster项目。

构建JHipster项目后,将自动创建一个可执行的WAR文件。将文件重命名为JAR后,该应用程序将无法再按预期运行。

jhipster-apps/foobar/target   ✗                                                                                                                                           1d ⚑
▶ ls -l
total 216096
-rw-r--r--    1 brborges  staff       431 27 Aug 12:29 Dockerfile
drwxr-xr-x  105 brborges  staff      3360 27 Aug 12:29 cache-loader
drwxr-xr-x    9 brborges  staff       288 27 Aug 12:29 classes
-rw-r--r--    1 brborges  staff       188 27 Aug 12:29 entrypoint.sh
drwxr-xr-x   10 brborges  staff       320 27 Aug 12:30 foobar-0.1.1-SNAPSHOT
-rwxr--r--    1 brborges  staff  58688877 27 Aug 12:30 foobar-0.1.1-SNAPSHOT.war
-rw-r--r--    1 brborges  staff  51095430 27 Aug 12:30 foobar-0.1.1-SNAPSHOT.war.original
drwxr-xr-x    3 brborges  staff        96 27 Aug 12:29 generated-sources
drwxr-xr-x    3 brborges  staff        96 27 Aug 12:33 generated-test-sources
drwxr-xr-x    3 brborges  staff        96 27 Aug 12:30 maven-archiver
drwxr-xr-x    3 brborges  staff        96 27 Aug 12:29 maven-status
drwxr-xr-x   32 brborges  staff      1024 27 Aug 12:30 surefire-reports
drwxr-xr-x    7 brborges  staff       224 27 Aug 12:29 test-classes
drwxr-xr-x    3 brborges  staff        96 27 Aug 12:30 test-results
drwxr-xr-x    9 brborges  staff       288 27 Aug 12:29 www

jhipster-apps/foobar/target   ✗                                                                                                                                           1d ⚑
▶ cp foobar-0.1.1-SNAPSHOT.war foobar-0.1.1-SNAPSHOT.jar

jhipster-apps/foobar/target   ✗                                                                                                                                           1d ⚑
▶ diff foobar-0.1.1-SNAPSHOT.war foobar-0.1.1-SNAPSHOT.jar

jhipster-apps/foobar/target   ✗                                                                                                                                           1d ⚑
▶ echo $?
0

执行WAR文件:

jhipster-apps/foobar/target   ✗                                                                                                                                          1d ⚑  ⍉
▶ java -jar foobar-0.1.1-SNAPSHOT.war &
[1] 18713
▶ curl -I http://localhost:8080
HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
Accept-Ranges: bytes
Date: Mon, 27 Aug 2018 19:51:08 GMT
Connection: keep-alive
Last-Modified: Mon, 27 Aug 2018 19:30:48 GMT
X-Content-Type-Options: nosniff
Content-Length: 992
Content-Type: text/html;charset=utf-8
Content-Language: en-CA

执行复制的JAR文件:

jhipster-apps/foobar/target   ✗                                                                                                                                          1d ⚑  ⍉
▶ java -jar foobar-0.1.1-SNAPSHOT.jar &
[1] 18783
▶ curl -I http://localhost:8080
HTTP/1.1 404 Not Found
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
Date: Mon, 27 Aug 2018 19:54:56 GMT
Connection: keep-alive
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
Content-Type: application/json;charset=UTF-8

由于其他旨在使用这种类型的文件运行Java SE应用程序的工具,我们需要该文件具有JAR扩展名。

虽然我知道WAR是可执行的,但文件类型“ WAR”始终设计为部署在Servlet容器或应用程序服务器上,而不是用java -jar执行。为此,工具希望文件的类型为JAR。

2 个答案:

答案 0 :(得分:1)

如果要创建JAR文件而不是WAR,则需要将<packaging>中的pom.xml部分从war更改为jar。您还需要将src/main/webapp的内容移至src/main/static(或另一个supported location

尽管您可以使用java -jar myApp.war运行Spring Boot WAR文件,但是其内部结构与可执行JAR不同。 WAR文件的根目录(在org.springframework.boot.loader包中)包含一些有限的类,这些类仅提供足够的代码来启动Web服务器并引导自身。然后,Web服务器将考虑WEB-INF/libWEB-INF/classes

对于可执行的JAR文件,考虑的文件夹为BOOT-INF/libBOOT-INF/classes

过去,重命名很可能是偶然发生的,但这绝不是推荐的方法。

答案 1 :(得分:1)

仅包装类型无效。正如Phil所指出的,我们将src/main/webapp文件夹用于客户端资产,这是通过webpack内置到target/www文件夹中的。

因此,在pom中更改软件包类型之后,还需要修改pom,以将生成的静态资产从target/www文件夹复制到src/resources/static文件夹。