Можно ли автоматически оптимизировать зависимости 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
Ответы
Ответ 1
Я бы не сказал: с очень не оптимизированными зависимостями. это просто кто-то не хорошо выполнил свою работу, вызывая определяющие зависимости, которые не используются, кто-то не понимает, что такое инструменты сборки и как это работает. Это можно сравнить с файлом Java, который содержит много неиспользуемых импортов. В случае неиспользуемого импорта в источниках Java это может быть просто обработкой IDE, но для зависимостей в Maven не существует такого простого способа, как уже было высказано, проблема заключается в типах DI и т.д., Что затрудняет эту работу. Вы можете попытаться вывести результат зависимости: проанализировать в script (существует опция для этой цели), а затем проверить результат сборки после очистки зависимостей.
Возможно, неплохо запустить
mvn dependency:analyze -DscriptableOutput=true
который создает выходные данные, которые могут быть очень просто извлечены из вывода и могут использоваться для дальнейшей обработки, как использование в качестве входных данных для версии-maven-plugin (с некоторым предварительным преобразованием).
Ответ 2
Я бы не рекомендовал автоматически очищать зависимости.
-
Добавление всего "Используемого необъявленного..." приводит к дублированию большинства транзитивных зависимостей, которые приводят к увеличению времени на чтение и управление ими.
-
Удаление всех "Неиспользуемых объявленных..." может привести к ошибкам во время выполнения, поскольку они: вызваны отражением или специально объявлены для переопределения версии того же артефакта, который уже использовался в зависимостях сторонних разработчиков (изменение их объём компиляции во время выполнения предпочтительнее, в то время как область тестирования должна быть нетронутой, чтобы избежать утечки их в производственный пакет) или добавлено для объявления использования необязательной транзитивной зависимости некоторой сторонней библиотеки и т.д.