Как настроить дополнительный путь к классам в SpringBoot?

Я хочу сделать отдельное веб-приложение. У меня есть некоторые проблемы с SpringBoot.

Мое приложение представляет собой один файл jar из SpringBoot.

Но моему приложению обычно нужен был jdbc драйвер jar. Я хочу исключить jar-файл драйвера jdbc для своего приложения и прочитать jar-файл библиотеки из папки lib.

Но папка SpringBoot lib — это BOOT-INF/lib, это final static. Итак, я хочу добавить внешний путь к классам (lib) для jar-файла драйвера jdbc.

Как настроить дополнительный путь к классам в SpringBoot. Это доступно?


person fightingmamoru    schedule 09.11.2016    source источник


Ответы (4)


Вы можете использовать параметр loader.path для определения местоположения внешней папки lib. Все jar-файлы в этой папке будут добавлены в путь к классам. Например, если вы хотите определить C:\extLib в качестве внешней папки lib, вы можете сделать следующее:

java -Dloader.path=/C:/extLib/ -jar aapName.jar

Чтобы это работало, вам нужно использовать PropertiesLauncher. Есть два способа сделать это:

Вариант 1

Обновите проект pom.xml и добавьте следующий тег:

<configuration>  <!-- added -->
  <layout>ZIP</layout> <!-- to use PropertiesLauncher -->
</configuration

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

<build> 
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>  <!-- added -->
                <layout>ZIP</layout> <!-- to use PropertiesLauncher -->
            </configuration>
        </plugin>
    </plugins>
</build>

Вариант 2

Используйте PropertiesLauncher при запуске приложения из командной строки:

java -cp aapName.jar -Dloader.path=/C:/extLib/ org.springframework.boot.loader.PropertiesLauncher

Ссылки:
Как добавить jar-файлы в путь к классам SpringBoot с помощью jarlauncher

person giftednewbie    schedule 19.12.2018
comment
Это работает со свойствами или только с банками? - person JGleason; 12.05.2021

Вы можете сослаться на эту ссылку ниже из весенней загрузки:

https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-property-launcher-features

Вы можете использовать свойство loader.path для определения местоположения папки lib

person mhasan    schedule 09.11.2016
comment
Спасибо за ваш ответ. Но теперь это работает. Мое приложение: /dev/myapp.jar, внешняя библиотека: /dev/lib/ojdbc6.jar. Установил loader.path, но библиотека не загрузилась. - person fightingmamoru; 15.11.2016
comment
@FIGHTINGMAMORU, твой комментарий сбивает с толку. Сначала упоминается working, а затем library was not loaded. У вас получилось? - person Rao; 05.05.2017
comment
Я думаю, он имел в виду «не» работает вместо «сейчас» работает. У меня аналогичная проблема с автономными весенними загрузочными банками. Кажется, он не загружает ни одной банки с помощью loader.path. Это должен быть каталог? Я не обязательно хочу загружать все в папку с моей банкой зависимостей - person Pickles; 19.07.2017

В моем случае понадобилась цитата, чтобы найти внешнюю папку lib на платформе Windows.

java -cp ScoreExtractionApp.jar -Dloader.path="lib" -Dloader.main=com.sample.score.ScoreExtraction.ScoreExtractionApplication org.springframework.boot.loader.PropertiesLauncher
person Ahmed Salem    schedule 31.12.2019

Вы можете настроить путь к классу в maven, используя плагин maven jar.

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
            <manifestEntries>
                <Class-Path>conf/</Class-Path>
            </manifestEntries>
       <manifest>
           <addClasspath>true</addClasspath>
           <classpathPrefix>lib/</classpathPrefix>
       </manifest>
    </archive>
   </configuration>
</plugin>
person Community    schedule 24.07.2021