PropertiesLauncher с Spring Boot 2 (и запуском WAR-архива) - PullRequest
0 голосов
/ 07 сентября 2018

Я создаю исполняемый файл WAR весенней загрузки 2.0.4, основанный на tomcat / jsp, который очень хорошо работает при использовании цели загрузки bootWar. Но теперь я хочу загрузить локальные внешние JAR-файлы, и WarLauncher не поддерживает это (есть ли причина для этого?). Поэтому я переключился на PropertiesLauncher через:

bootWar {
    enabled = true
    manifest {
        attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
    }
}

Теперь, глядя в сгенерированный файл войны, в MANIFEST все выглядит нормально:

Start-Class: com.mypackage.Application
Main-Class: org.springframework.boot.loader.PropertiesLauncher

Теперь я попытался выяснить правильные аргументы командной строки, чтобы начать эту вещь, которая была немного проб и ошибок, но это привело меня почти к финишу:

java -Dloader.path = WEB-INF / предоставлена ​​библиотека, WEB-INF / lib, WEB-INF / классы -jar myapplication-4.0.0.war

Итак, я в основном посмотрел на WarLauncher и попытался воссоздать classpath через значения loader.path без добавления сторонних jar-файлов, потому что сначала я просто хочу запустить свое приложение.

Загрузка моего приложения выглядит нормально.

Теперь я хочу добавить «локальный» путь, где находятся мои сторонние банки. Я думал, что я могу просто сделать:

java -Dloader.path = WEB-INF / предоставлен lib, WEB-INF / lib, WEB-INF / классы, jar: файл: lib -jar myapplication-4.0.0.war

поэтому добавьте jar: file: lib , что должно означать папку "lib" рядом с моей исполняемой WAR. Но это не работает. Также не работает просто добавление «, lib» в loader.path.

Единственное, что работает, - это добавление полного пути, такого как "jar: file: / foo / bar / lib", но мне бы очень хотелось, чтобы он был относительно текущей исполняемой папки WAR.

Может кто-нибудь сказать мне, как определить относительную локальную папку, где искать Jars?

Надеюсь, я помогу другим, борющимся с PropertiesLauncher в сочетании с исполняемыми файлами WAR, потому что он не очень прост и не так много документации, кроме https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html

1 Ответ

0 голосов
/ 08 сентября 2018

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

Если вы хотите включить определенный файл JAR, вы можете использовать:

-Dloader.path=file:/myfolder/my.jar

Если вы хотите включить целый директор с несколькими банками, вы можете сделать:

-Dloader.path=file:/myfolder/

(вы можете просто сделать папку относительной к WAR, используя файл: myfolder)

Другие варианты, такие как чтение из JAR, можно получить, прочитав код на https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/PropertiesLauncher.java

Что действительно помогло, так это флаг отладки:

-Dloader.path=file:/myfolder/ -Dloader.debug=true

Вы получите system.outs о проблемах загрузки классов с помощью PropertiesLauncher.

Я действительно хотел бы видеть флаг -Dloader.schema=war, который принимает макет WAR вместо макета JAR. Таким образом, нужно будет только добавить свои собственные пути, а не нужные папки внутри WAR.

...