Плагин Spring Boot Maven и целевой каталог requiresUnpack

У меня есть случай, когда мне нужно распаковать библиотеку с помощью:

весна-загрузка: переупаковка: требуется распаковать

В противном случае другая библиотека из проекта не сможет работать должным образом. Как указано в ссылке, выбранные библиотеки распаковываются и копируются во временный каталог. Распаковка библиотек во временный каталог - не лучшая идея, если я хочу, чтобы приложение работало дольше, чем время истечения срока действия временных файлов. Файлы будут удалены, и приложение просто перестанет работать должным образом.

  • Есть ли способ указать другой целевой каталог?
  • Есть ли причина, по которой временное местоположение является хорошим местом для библиотек приложений?

До сих пор мне удавалось изменить целевое местоположение, перезаписав переменные среды TMP и ТЕМП., но в долгосрочной перспективе это звучит как ужасная идея.

Оцените любую помощь здесь.

Вы пробовали с outputDirectory docs.spring.io/autorepo/docs/spring-boot/1.5.10.BUILD-SNAPSH‌ OT /…

bittu 14.11.2018 19:33

Что такого в библиотеке, что заставляет вас ее распаковывать? Учитывая, что spring -boot является реализацией по соглашению, и эти шаги выходят за рамки соглашения, моим личным решением вашей проблемы было бы найти решение, не требующее распаковки библиотеки.

Kieveli 14.11.2018 21:12

outputDirectory используется для размещения целевого jar-файла, а не для того, где библиотеки будут распакованы во время выполнения; @Kieveli эта функциональность поддерживается Spring-boot docs.spring.io/spring-boot/docs/current/reference/html/… именно в том случае, когда мне нужно использовать; к сожалению, я имею дело с проприетарными библиотеками, которые не могу изменить

Grzegorz Gajos 15.11.2018 09:00

Мне все еще любопытно, почему нужно его распаковать, но если вы не хотите делиться, ничего страшного. Моя весенняя загрузка работает как экземпляр Tomcat. Tomcat часто использует временное пространство для запуска веб-приложения. Это не означает, что временная папка будет удалена произвольно. У вас возникла проблема, когда распакованная библиотека была удалена во время работы веб-службы?

Kieveli 15.11.2018 14:41

Я не могу поделиться подробностями о библиотеке (конфиденциальность), но для правильной работы требуется распаковка. Да, я серьезно столкнулся с этой проблемой в производственной среде, когда приложение внезапно перестало работать (через 10 дней) из-за исключения, похожего на ClassNotFound.

Grzegorz Gajos 15.11.2018 15:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
1 258
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема касается не только "requiresUnpack", это то, как spring-boot / tomcat обрабатывает свои временные файлы. Так что это может удивить вас и в других областях.

Существует проблема, описывающая такое поведение: https://github.com/spring-projects/spring-boot/issues/5009

Обходные пути:

  • используйте server.tomcat.basedir для определения базового каталога Tomcat. Если не указано иное, используется временный каталог.
  • используйте -Djava.io.tmpdir=/var/tmp, чтобы запустить приложение с другим временным каталогом.

Другое решение - НЕ распаковывать вашу библиотеку. Не храните его в своей толстой банке, а храните где-нибудь в пути к классам.

Я выберу -Djava.io.tmpdir=[location], возможно, в будущем появится способ настроить это по-другому: github.com/spring-projects/spring-boot/issues/15180

Grzegorz Gajos 16.11.2018 11:37

@GrzegorzGajos Вы также добавляете временное местоположение в class-path? Как приложение находит их после распаковки предполагаемых банок? Я имею в виду, что банки должны быть доступны на пути к классам, верно?

ds459 19.08.2021 23:45

@ ds459 Приложение / Tomcat ищет их в каталоге по умолчанию. Это нестандартное поведение. Мне не нужно было добавлять временное местоположение в путь к классам.

Grzegorz Gajos 15.09.2021 14:31

Другие вопросы по теме