Я пытаюсь использовать существующее приложение Spring Boot, размещенное в репозитории Maven моей компании. Это приложение принимает сообщения с сервера Kafka и помещает их в базу данных Mongo. Все, что нужно, чтобы заставить его работать, это предоставить ему файл свойств, который определяет серверы Kafka и Mongo. Мне нужно создать проект Maven, который импортирует это приложение как зависимость и предоставляет ему файл свойств для конфигурации. Единственными двумя файлами должны быть pom.xml и application.properties. Конечным результатом должен быть исполняемый JAR-файл, который выполняет зависимость (существующее приложение Spring Boot), используя мой файл свойств.
У меня нет выбора в выборе другого подхода к решению этой проблемы.
Я потратил бесчисленное количество часов, пытаясь настроить Maven для этого. Мне, наконец, удалось заставить это работать при использовании команды mvn spring-boot:run, но я не могу заставить ее создать правильно работающий исполняемый файл JAR.
Я включаю свою зависимость, как и любую другую:
<dependencies>
<dependency>
<groupId>com.company.dept</groupId>
<artifactId>consume-to-mongo-app</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
Затем я определяю основной класс из зависимости следующим образом:
<properties>
<mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
</properties>
И мой раздел плагинов выглядит так:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<mainClass>org.springframework.boot.loader.JarLauncher</mainClass>
</configuration>
</execution>
</executions>
</plugin>
Приложение работает нормально при запуске mvn spring-boot:run
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ / _` | \ \ \ \
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.4.RELEASE)
После запуска mvn clean package, затем java -jar myjar.jar я получаю тысячи таких:
)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caused by: java.lang.reflect.InvocationTargetException
... 1024 more
Я предлагаю вам преобразовать ваш проект в многомодульный проект Maven. У вас будет два модуля (проекта): ваш проект Spring и второй, содержащий ваши файлы свойств. Затем установите зависимость между вашими модулями. Сгенерированный jar должен содержать все ваши файлы (включая файлы свойств).
Эта ссылка может вам помочь: stackoverflow.com/questions/52673216/…
Я не думаю, что проблема в том, что файл свойств не найден. Моя проблема в том, что когда я собираю файл JAR, он выдает сумасшедшее количество исключений отражения (тысячи). Таким образом, проблема должна быть связана с чем-то еще, связанным с весенней загрузкой.
с Spring-boot 2 похоже изменился baeldung.com/spring-boot-командная строка-аргументы




Я смог решить свою проблему с помощью плагина Maven Assembly для создания специально упакованного ZIP-файла, содержащего JAR-файл моих зависимостей и мой файл свойств. На сервере развертывания этот ZIP можно извлечь, а банку можно запустить в полученном каталоге, и она подхватит файл свойств. Я следовал этому руководству: https://medium.com/@kasunpdh/using-the-maven-assembly-plugin-to-build-a-zip-distribution-5cbca2a3b052.
Я внес несколько изменений в руководство, чтобы моя окончательная ZIP-структура непосредственно содержала JAR моей зависимости Spring Boot App и мой файл свойств без каких-либо других каталогов. Это мой модифицированный файл zip.xml:
<assembly xmlns = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<!--<modelVersion>4.0.0</modelVersion>-->
<id>zip</id>
<includeBaseDirectory>true</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/resources</directory>
<outputDirectory>.</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>.</outputDirectory>
<excludes>
<exclude>${project.groupId}:${project.artifactId}:jar:*</exclude>
</excludes>
</dependencySet>
</dependencySets>
</assembly>
Вам разрешено создавать zip-файл, содержащий свойства и банку? Если он разархивирован и файл свойств находится в том же каталоге, что и Spring Boot Jar, приложение Spring Boot автоматически подберет его.