Создание исполняемого фляги с maven, весенней загрузкой и сторонними библиотеками без репозитория не сработало в любом случае - PullRequest
0 голосов
/ 19 декабря 2018

Я собираюсь развернуть свое первое 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>

Я надеюсь, что кто-нибудьможет помочь и объяснить мне, как справиться с этой темой.Я много читал, я много пробовал, и каждая попытка заканчивалась сообщением об ошибке.Это было неприятно.

Спасибо, парни и девушки!

1 Ответ

0 голосов
/ 19 декабря 2018

Рассматривали ли вы создание внутреннего хранилища Maven?Самым простым из них будет Apache Archival (https://archiva.apache.org/index.cgi):

. Для Apache Archival вы можете вручную скопировать сторонние библиотеки в репозиторий maven.

В вашем pom.xml вы должныдобавить следующее:

<repositories>
    <repository>
        <id>internal</id>
        <name>Archiva Managed Internal Repository</name>
        <url>http://IP_ADDRESS:PORT/repository/internal/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...