Артефакт JHipster WAR от Spring Boot, переименованный в JAR, не будет работать - PullRequest
0 голосов
/ 27 августа 2018

Я создал пустой монолитный проект 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

Нам нужно, чтобы файл имел расширение JAR из-за других инструментов, предназначенных для запуска приложений Java SE с этим типом файла.

Хотя я понимаю, что WAR - исполняемый файл, тип файла "WAR" всегда был предназначен для развертывания на контейнерах сервлетов или серверах приложений, а не для выполнения с java -jar. Для этого инструменты ожидают, что файлы будут иметь тип JAR.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Один тип упаковки не подойдет. Как указал Фил, мы используем папку src/main/webapp для наших клиентских ресурсов, которые встроены веб-пакетом в папку target/www.

Таким образом, после изменения типа пакета в pom вам также необходимо изменить pom, чтобы скопировать сгенерированные статические ресурсы из папки target/www в папку src/resources/static.

0 голосов
/ 28 августа 2018

Вам нужно изменить секцию <packaging> в вашем pom.xml с war на jar, если вы хотите создать файл JAR, а не WAR. Вам также необходимо переместить содержимое src/main/webapp в src/main/static (или в другое поддерживаемое местоположение )

Хотя вы можете запустить WAR-файл Spring Boot, используя java -jar myApp.war, внутренняя структура не совпадает с исполняемым JAR. Файл WAR содержит несколько ограниченных классов в корневом каталоге (в пакете org.springframework.boot.loader), которые предоставляют достаточно кода для запуска веб-сервера и самозагрузки. Затем веб-сервер рассмотрит WEB-INF/lib и WEB-INF/classes.

Для исполняемого файла JAR рассматриваются следующие папки: BOOT-INF/lib и BOOT-INF/classes.

Возможно, что переименование могло сработать в прошлом случайно, но это никогда не был рекомендуемый подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...