В Gradle, как объявить общие зависимости в одном месте?

В Maven есть очень полезная функция, когда вы можете определить зависимость в разделе родительского POM и ссылаться на эту зависимость от дочерних модhive, не указав версию или область или что-то еще.

Каковы альтернативы в Gradle?

Вы можете объявлять общие зависимости в родительском скрипте:

 ext.libraries = [ // Groovy map literal spring_core: "org.springframework:spring-core:3.1", junit: "junit:junit:4.10" ] 

Из дочернего скрипта вы можете использовать объявления зависимостей так:

 dependencies { compile libraries.spring_core testCompile libraries.junit } 

Чтобы разделить объявления зависимостей с расширенными параметрами конфигурации, вы можете использовать DependencyHandler.create :

 libraries = [ spring_core: dependencies.create("org.springframework:spring-core:3.1") { exclude module: "commons-logging" force = true } ] 

Множество зависимостей могут совместно использоваться под тем же именем:

 libraries = [ spring: [ // Groovy list literal "org.springframework:spring-core:3.1", "org.springframework:spring-jdbc:3.1" ] ] 

dependencies { compile libraries.spring } затем добавят обе зависимости сразу.

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

Это поздний ответ, но вы также можете посмотреть: http://plugins.gradle.org/plugin/io.spring.dependency-management. Он предоставляет возможность импортировать maven ‘bom’ и повторно использовать определения определенных в «bom». Это, безусловно, хорошая помощь, когда вы постепенно переходите от maven к gradle! Наслаждаюсь этим прямо сейчас.

io.spring.gradle:dependency-management-plugin плагин с io.spring.gradle:dependency-management-plugin имеет проблемы с новой серией Gradle 3.x, но стабилен для серии 2.x. Для справки смотрите сообщение об ошибке. Поддержка Drop для Gradle 3 # 115

В случае Spring ( основной промотор использования спецификации ) вы можете завершить:

 buildscript { repositories { mavenLocal() jcenter() } dependencies { classpath 'io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE' } } repositories { mavenLocal() jcenter() } apply plugin: 'java' apply plugin: 'io.spring.dependency-management' dependencyManagement { imports { mavenBom 'io.spring.platform:platform-bom:Athens-SR3' } } dependencies { compile 'org.springframework.boot:spring-boot-starter-web' testCompile 'org.springframework.boot:spring-boot-starter-test' } 

Обратите внимание, что io.spring.platform:platform-bom имеет org.springframework.boot:spring-boot-starter-parent как родительский, поэтому он совместим с Spring Boot

Вы можете проверить фактическое разрешение зависимостей через:

 $ gradle dependencies $ gradle dependencies --configuration compile $ gradle dependencies -p $SUBPROJ $ gradle buildEnvironment $ gradle buildEnvironment -p $SUBPROJ 

или с задачей:

 task showMeCache { configurations.compile.each { println it } } 

Прочитайте официальное сообщение в блоге Soring. Лучшее управление зависимостями для Gradle, чтобы понять причину введения io.spring.gradle:dependency-management-plugin .

Это сообщение в блоге предлагает управлять зависимостями и группами в качестве конфигураций: https://www.javacodegeeks.com/2016/05/manage-dependencies-gradle-multi-project-build.html

Я сам не пробовал, но это выглядит интересно.

Корневой проект build.gradle

 subprojects { configurations { commonsIo } dependencies { commonsIo 'commons-io:commons-io:2.5' } } 

Подпроект build.gradle

 configurations { compile.extendsFrom commonsIo } 

Вы можете централизовать зависимость, используя следующий код:

В gradle.properties

 COMPILE_SDK_VERSION=26 BUILD_TOOLS_VERSION=26.0.1 TARGET_SDK_VERSION=26 MIN_SDK_VERSION=14 ANDROID_SUPPORT_VERSION=26.0.2 

В каждом модуле добавьте build.gradle :

 android { compileSdkVersion COMPILE_SDK_VERSION as int buildToolsVersion BUILD_TOOLS_VERSION as String defaultConfig { minSdkVersion MIN_SDK_VERSION as int targetSdkVersion TARGET_SDK_VERSION as int versionCode 1 versionName "1.0" } } dependencies { compile "com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION}" compile "com.android.support:support-v4:${ANDROID_SUPPORT_VERSION}" compile "com.android.support:support-annotations:${ANDROID_SUPPORT_VERSION}" compile "com.android.support:support-vector-drawable:${ANDROID_SUPPORT_VERSION}" compile "com.android.support:design:${ANDROID_SUPPORT_VERSION}" } 
  • Swift: защита против, если пусть
  • Указывает ли переменная = null ее на сборку мусора
  • Лучшая практика для определения событий кнопки в android
  • Динамически добавленные элементы управления в Asp.Net
  • Почему мне нужно называть super -dealloc последним, а не первым?
  • Как работает пул автозаполнения NSAutoreleasePool?
  • Как узнать использование памяти моего приложения в Android?
  • Найти физический адрес таблицы векторов исключений из модуля ядра
  • Адрес памяти переменных в Java
  • Как я могу назвать оригинальный «оператор new», если я его перегрузил?
  • Как получить список файлов с определенным расширением в данной папке?
  • Interesting Posts

    Почему GetManifestResourceStream возвращает значение null, пока имя ресурса существует при вызове GetManifestResourceNames?

    управление сеткой для ASP.NET MVC?

    Могу ли я переопределить кнопку «Главная» в моем приложении?

    Как запретить удаление / изменение разрешения файла?

    Запутывание разделов Fedora на новой установке

    While-loop игнорирует scanf во второй раз

    Контейнер Jboss Java EE и ExecutorService

    Как я могу определить, какая оперативная память будет соответствовать моему компьютеру?

    Как масштабировать bitmap до размера экрана?

    Где узнать больше о кодах настроек клавиатуры приложения OSX?

    Использование скриптов на главной странице с помощью ASP.NET MVC

    Почему правильный сценарий оболочки дает обернутое / усеченное / поврежденное сообщение об ошибке?

    Синтаксис Razor обеспечивает непревзойденное преимущество в разметке пользовательского интерфейса?

    Mod_rewrite работает, но php-страницы не найдены или не распознаны (загружаются, а не выполняются)

    Как заставить Safari открывать результаты поиска на новой вкладке по умолчанию?

    Давайте будем гением компьютера.