我创建了一个空的,整体的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。
答案 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/lib
和WEB-INF/classes
。
对于可执行的JAR文件,考虑的文件夹为BOOT-INF/lib
和BOOT-INF/classes
。
过去,重命名很可能是偶然发生的,但这绝不是推荐的方法。
答案 1 :(得分:1)
仅包装类型无效。正如Phil所指出的,我们将src/main/webapp
文件夹用于客户端资产,这是通过webpack内置到target/www
文件夹中的。
因此,在pom中更改软件包类型之后,还需要修改pom,以将生成的静态资产从target/www
文件夹复制到src/resources/static
文件夹。