Подтвердить что ты не робот

Можно ли автоматически оптимизировать зависимости maven?

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

Я хочу удалить избыточность и добавить необходимые зависимости. Я запустил mvn dependency:analyze и получил длинный список предупреждений, которые мне нужно исправить.

Интересно, есть ли плагин maven или любая другая утилита, которая может автоматически обновлять мои файлы pom.xml. Я пытался сделать это вручную, но это занимает много времени. Кажется, для выполнения задачи потребуется несколько дней копирования/вставки.

В худшем случае я могу написать такой script сам, но, вероятно, готовый материал существует?

Вот как mvn dependency:analyze сообщает предупреждения о зависимостях:

[WARNING] Used undeclared dependencies found:
[WARNING]    org.apache.httpcomponents:httpcore:jar:4.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    commons-lang:commons-lang:jar:2.4:compile
[WARNING]    org.json:json:jar:20090211:compile
4b9b3361

Ответ 1

Я бы не сказал: с очень не оптимизированными зависимостями. это просто кто-то не хорошо выполнил свою работу, вызывая определяющие зависимости, которые не используются, кто-то не понимает, что такое инструменты сборки и как это работает. Это можно сравнить с файлом Java, который содержит много неиспользуемых импортов. В случае неиспользуемого импорта в источниках Java это может быть просто обработкой IDE, но для зависимостей в Maven не существует такого простого способа, как уже было высказано, проблема заключается в типах DI и т.д., Что затрудняет эту работу. Вы можете попытаться вывести результат зависимости: проанализировать в script (существует опция для этой цели), а затем проверить результат сборки после очистки зависимостей.

Возможно, неплохо запустить

mvn dependency:analyze -DscriptableOutput=true 

который создает выходные данные, которые могут быть очень просто извлечены из вывода и могут использоваться для дальнейшей обработки, как использование в качестве входных данных для версии-maven-plugin (с некоторым предварительным преобразованием).

Ответ 2

Я бы не рекомендовал автоматически очищать зависимости.

  • Добавление всего "Используемого необъявленного..." приводит к дублированию большинства транзитивных зависимостей, которые приводят к увеличению времени на чтение и управление ими.

  • Удаление всех "Неиспользуемых объявленных..." может привести к ошибкам во время выполнения, поскольку они: вызваны отражением или специально объявлены для переопределения версии того же артефакта, который уже использовался в зависимостях сторонних разработчиков (изменение их объём компиляции во время выполнения предпочтительнее, в то время как область тестирования должна быть нетронутой, чтобы избежать утечки их в производственный пакет) или добавлено для объявления использования необязательной транзитивной зависимости некоторой сторонней библиотеки и т.д.