Найдите дубликаты JAR в пакете толстых банок OSGi

В настоящее время я работаю над проектом, результатом которого является толстый JAR, работающий в контексте OSGi (Apache Felix). Есть ли способ / команда, чтобы проверить, доступны ли некоторые из банок, которые я встроил в свою толстую банку, из других пакетов и сервисов, чтобы я мог их удалить (и, таким образом, уменьшить толстую банку)?

Причина, по которой я создаю толстую банку, заключается в том, что я использую другую систему сборки для сборки своей банки. (Я использую Scala и SBT, все остальное построено на Java и Gradle)

Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
0
218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Я не знаю никаких автоматических инструментов, делающих это, но у Apache Felix есть два инструмента, которые могут помочь вам найти ваши дубликаты:

  1. /system/console/depfinder
  2. /system/console/status-duplicate_exports

Особенно второй должен вам помочь. В нем перечислены пакеты, которые экспортируются более одного раза, а затем перечислены пакеты, которые экспортируют эти пакеты. Если ваш пакет появляется в этом списке, вы знаете, что другой пакет экспортирует пакеты, которые находятся в вашем толстом пакете.

Но, как и в случае с depfinder, вам придется просмотреть список вручную или написать небольшой скрипт, который поможет вам.

Другой вариант: просто посмотрите, являются ли JAR-файлы, которые вы в настоящее время включаете в свой толстый JAR, пакетами OSGi (многие IDE сообщают об этом уже в каком-то представлении зависимостей проекта), и запишите заголовок Bundle-SymbolicName.

Затем вы извлекаете одну и ту же информацию из всех пакетов, установленных во время выполнения Felix, например. используя оболочка гого:

lb -s

... или если у вас есть каталог с пакетами для среды выполнения и командой bnd (и вы используете Unix):

find <bundles-directory> -type f -iname "*.[jw]ar" -exec bnd --failok print --manifest {} \; 2>/dev/null | grep -F 'Bundle-SymbolicName'

Теперь вы можете сравнить эти списки со списками SymbolicName, которые вы нашли в своем толстом JAR. После того, как вы нашли совпадение, вы также должны убедиться, что версия в порядке.

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