Используя gradle, чтобы найти дерево зависимостей
Можно ли использовать gradle для создания дерева того, что зависит от того, что?
У меня есть проект и вы хотите узнать все зависимости, чтобы я мог немного сократить его с помощью прямых объявлений и т.д.
Для Android используйте эту строку
gradle app:dependencies
или если у вас есть обертка gradle:
./gradlew app:dependencies
где app
- ваш проектный модуль.
Кроме того, если вы хотите проверить, есть ли что-то из compile
vs. testCompile
vs androidTestCompile
, а также то, что его тянет:
./gradlew :app:dependencyInsight --configuration compile --dependency <name>
./gradlew :app:dependencyInsight --configuration testCompile --dependency <name>
./gradlew :app:dependencyInsight --configuration androidTestCompile --dependency <name>
Вы можете отобразить дерево зависимостей командой gradle dependencies
. Для получения дополнительной информации см. Раздел 11.6.4 Задание зависимостей проекта в онлайн-руководстве пользователя.
Если вам трудно перейти на консольный вывод gradle dependencies
, вы можете добавить плагин отчетов проекта:
apply plugin: 'project-report'
И сгенерируйте отчет HTML, используя:
$ ./gradlew htmlDependencyReport
Отчет обычно можно найти в build/reports/project/dependencies/index.html
В Android Studio (по крайней мере, начиная с версии 2.3.3) вы можете запустить команду непосредственно из пользовательского интерфейса:
Перейдите на вкладку Gradle, а затем дважды щелкните по: yourmodule → Tasks → android → androidDependencies
Дерево будет отображаться на вкладке Gradle Консоль
Часто полный график зависимостей test
, compile
и androidTestCompile
слишком велик, чтобы исследовать вместе. Если вы просто хотите использовать график зависимости compile
, который вы можете использовать:
./gradlew app:dependencies --configuration compile
Источник: Gradle раздел разделов 4.7.6
Примечание. compile
устарел в более поздних версиях Gradle, а в более поздних версиях вам рекомендуется сменить все ваши зависимости compile
на implementation
. См. этот ответ здесь
Если вы хотите визуализировать свои зависимости в графике, вы можете использовать плагин gradle-dependency-graph-generator.
Обычно выходные данные этого плагина можно найти в каталоге build/reports/dependency-graph, и он содержит три файла (.dot |.png |.svg), если вы используете 0.5.0 версия плагина.
Пример графика зависимостей в реальном приложении (Шахматные часы):
Для Android введите это в терминале
gradlew app:dependencies
В нем будут перечислены все зависимости и те, которые имеют более новые версии для обновления, например.
com.android.support:customtabs:26.1.0 -> 27.1.1 (*)
Ситуация в Gradle продвинулась вперед, поэтому я считаю, что этот вопрос заслуживает другого ответа.
Начиная с Gradle 4.3, были введены сборки сканов. Вся соответствующая информация доступна в документации Gradle (1, 2). Для меня это, кажется, самый простой способ проверить ваши зависимости (и, как правило, вашу сборку) понятным, организованным способом.
Их очень легко создать, просто выполните:
gradle build --scan
(или ./gradlew build --scan
, если вы используете обертку)
Это создает случайно сгенерированную ссылку, где вы можете увидеть ваш скан. Открывая эту ссылку, вы вводите свой адрес электронной почты и получаете полный контроль над ссылкой: например. поделиться или удалить его. В нем много информации о вашей сборке, а не только о зависимостях. Вы можете увидеть свои зависимости, их иерархии, репозиторий, используемый для их получения, а также множество других вещей о вашей сборке, а именно, ее производительность (которая представляет интерес для больших сложных сборок), ваши тесты, даже вывод на консоль и ваш конфигурация системы, в которой использовались JDK и JVM, максимальный размер кучи и т.д.
Это печатный экран из фиктивного проекта:
Сканирование сборки является общей записью сборки, которая дает представление о том, что произошло и почему. Вы можете бесплатно создать сборку на scans.gradle.com.
Однако обратите внимание, что информация для вашего процесса сборки будет отправлена на серверы Gradle. Вы можете полностью удалить его, когда закончите проверку.
Наконец, вы также можете использовать сборку сканов с версиями Gradle более ранних, чем 4.3, вам просто нужно вручную добавить плагин сканов в ваш buildscript.
Редактирование:
Включая некоторые отзывы из комментариев, некоторые дополнительные заметки:
1) Это очень трудно сделать по ошибке или без понимания того, что некоторая информация для вашей сборки будет онлайн (частная для вас, с возможностью ее удаления, но все же онлайн).
При выполнении gradle build --scan
появляется следующее сообщение:
Publishing a build scan to scans.gradle.com requires accepting the Gradle
Terms of Service defined at https://gradle.com/terms-of-service. Do you
accept these terms? [yes, no]
Вы должны явно написать yes
, а затем сообщение продолжится:
Publishing build scan...
https://gradle.com/s/a12en0dasdu
2) В Gradle Enterprise вы можете размещать сканы сборки gradle на своих собственных серверах. Однако у меня нет опыта в этом, и мой предложенный подход был о стандартном распределении Gradle, используя серверы Gradle для ваших проверок сборки.
3) Сам Gradle продвигает сканирование сборки как способ решения большинства ваших проблем со сборкой.
В Android Studio
1) Откройте терминал и убедитесь, что вы находитесь в корневой папке проекта.
2) Запустите ./gradlew app:dependencies
(если не использовать обертку gradle, попробуйте gradle app:dependencies
)
Обратите внимание, что запуск ./gradle dependencies
даст вам только дерево зависимостей корневой папки проекта, поэтому важно отметить приложение, описанное выше, т.е. ./gradlew app:dependencies
.
Я также нашел полезным запустить это:
./gradlew dI --dependency <your library>
Это показывает, как разрешаются зависимости (dependencyInsight
), и помогает вам отладить, где вам нужно принудительно включать или исключать библиотеки в вашем build.gradle
Видеть: https://docs.gradle.org/current/userguide/tutorial_gradle_command_line.html
Обратите внимание, что вам может понадобиться сделать что-то вроде ./gradlew <module_directory>:<module_name>:dependencies
если модуль имеет дополнительную директорию, прежде чем достигнет ее build.gradle. Если вы сомневаетесь, выполните ./gradlew tasks --all
чтобы проверить имя.
Посмотрите другие вопросы по метке gradle или Задайте вопрос