#java #spring #maven #dependencies
Вопрос:
Я хочу получить идентификаторы групп зависимостей, которые использует мое приложение. У меня есть списки путей к файлам, которые локально выглядят следующим образом:
/Users/myName/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar /Users/myName/.m2/repository/org/springframework/spring-context/5.2.2.RELEASE/spring-context-5.2.2.RELEASE.jar /Users/myName/.m2/repository/org/springframework/boot/spring-boot-actuator/2.2.2.RELEASE/spring-boot-actuator-2.2.2.RELEASE.jar /Users/myName/.m2/repository/junit/junit/4.13.1/junit-4.13.1.jar
Похоже, у нас есть шаблон, считая от конца косыми чертами, у нас есть jar, версия, артефакт, а затем есть groupId. Но хитрость в том, что не всегда идентификатор группы содержит одинаковое количество слов, в jakarta.аннотации и org.springframework их 2, иногда 3 или только 1.
Кроме того, не всегда путь выглядит одинаково, я полагаю, что на сервере его нет в каталоге .m2/репозитория.
Кто-нибудь знает, как получить идентификаторы групп из зависимостей в нашем приложении?
Комментарии:
1. Здравствуйте, можете ли вы вместо этого проанализировать файл pom для вашего приложения? Или можно использовать дерево зависимостей mvn:, а затем проанализировать результат?
Ответ №1:
Вы оставляете последние два имени каталога и имя файла, затем получаете идентификатор группы.
Пример:
/Users/myName/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar
ведет к jakarta/annotation
, затем замените /
на .
, и вы закончили.
Комментарии:
1. Что, если есть только один? как /Users/myName/.m2/repository/junit/junit/4.13.1/junit-4.13.1.jar И как я узнаю, сколько их там?
2. То же правило. Вы пропускаете
junit/4.13.1/junit-4.13.1.jar
, поэтому результирующий идентификатор группы равенjunit
. Так что не имеет значения, есть ли один, два или, может быть, пять. Просто возьмите все после.../repository/
и опустите последние два каталога и имя файла.3. Я верю , что так бывает не всегда
.../repository/
, вот в чем дело. Я написал это в описании вопроса. Локально нормально, но что на сервере? Мне нужно универсальное решение.4. Хорошо, я недостаточно внимательно прочитал вопрос. Если у вас нет возможности определить базовый каталог, то этот метод на самом деле неприменим. Тогда, возможно, было бы лучше использовать
dependency:tree
или для добавления списка зависимостей во время сборки в какой-либо файл, как в METAINF.5. Есть ли возможность использовать dependency:tree в обычной java? Если нет, то как я могу реализовать такое решение как функцию в java, spring?