Я собираюсь развернуть свое первое jar-приложение.Так что это может быть нубский вопрос.Подводя итог, мой вопрос заключается в том, как сгенерировать исполняемый jar с maven и spring, который также содержит сторонние библиотеки (которых нет в репо) (uberJar) или jar, который может быть запущен с заданным classpath.Я попробовал несколько подходов: живой maven-assembly-plugin, maven-shade-plugin и т. Д.
Я начал с java, потому что мне пришлось и решил пойти с maven и весенней загрузкой.Мой проект основан на сторонних банках, которые не находятся в репо, потому что разработчики думают, что банки суперсекретны.Это часть моей проблемы.
Поэтому я добавил jar-файл в libs / [companyname] и в intellij создал «библиотеку» этой папки, чтобы включить jar-файлы в classpath (?).Во время разработки все работает.
Здание с maven не удалось (не удается найти символ).Поэтому я добавил все более 80 сторонних jar-файлов в pom.xml (system-scope, systempath = $ {project.basedir} / libs / companyname).Я не хочу создавать локальное репо, потому что обновления libs (80+) поставляются в полном пакете и могут быть заменены с 1 на 1. Сборки Maven, но jar не запускается, учитывая это сообщение об ошибке
java.lang.NoClassDefFoundError:
Итак, я подумал, что библиотеки находятся в банке для компиляции, но не "доступны" из основного класса.Поэтому я добавил maven-assembly-plugin в pom, чтобы создать uberJar.Это происходит через 16 минут без сообщения об ошибке в пакете bountycastle.Это кажется общей проблемой.Я перешел к Maven-Shade-плагин.Это создает мне uberJar (60 МБ), но Spring не загружается, потому что не может найти эти сторонние библиотеки.Я не знаю почему.
Итак, я подумал выбросить метод uberJar и перейти к методу classpath, но я не понимаю, как это сделать.В результате для меня не имеет значения, разверну ли я uberJar или jar с classpath-libs.Это просто должно бежать.Но uberJar будет лучше.
Хорошо, вот некоторые подробности моего проекта и pom.xml
\root
- \libs
- \[companyname] <-- 3rd party libs
- \src
- \main
- \....
- pom.xml
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<dependencies>
<!-- Libs from official repos -->
<dependency>
...
</dependency>
...
<!-- These 80+ secret 3rd party libs with no repo -->
<dependency>
<groupId>...</groupId>
<artifactId>...<artifactId>
<version>1.0.0.10</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/[companyname]/artifactName-1.0.0.10.jar</systemPath>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>libs/[companyname]/**</directory>
<filtering>true</filtering>
<includes>
<include>*.jar</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>my main class name / namespace</mainClass>
<layout>JAR</layout>
</configuration>
</plugin>
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<minimizeJar>false</minimizeJar>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.factories</resource>
</transformer>
</transformers>
</configuration>
</plugin>
-->
</plugins>
</build>
Я надеюсь, что кто-нибудьможет помочь и объяснить мне, как справиться с этой темой.Я много читал, я много пробовал, и каждая попытка заканчивалась сообщением об ошибке.Это было неприятно.
Спасибо, парни и девушки!