Gradle функция родительского помпа
В моей работе мы используем Maven. Я собираюсь попробовать gradle в первый раз. Мы используем общий родительский pom для всего проекта, который имеет настройки для обычно используемых плагинов maven и нескольких зависимостей comon. Есть ли аналогичный вариант в gradle?
Мой второй вопрос касается управления выпуском. Мы используем maven release плагин, который работает очень хорошо для нас. Есть ли что-то подобное в gradle?
Ответы
Ответ 1
Чтобы делиться материалами внутри нескольких проектов одной и той же сборки, используйте allprojects { ... }
, subprojects { ... }
и т.д. Кроме того, дополнительные свойства (ext.foo = ...
), объявленные в родительском проекте, видны в подпроектах. Обычная идиома - иметь что-то вроде ext.libs = [junit: "junit:junit:4.11", spring: "org.springframework:spring-core:3.1.0.RELEASE", ...]
в сборке верхнего уровня script. Субпроекты могут затем выборочно включать зависимости по их короткому имени. Вы должны найти дополнительную информацию об этом в Gradle Форумы.
Чтобы делиться логикой между сборками, вы можете написать плагин script (foo.gradle
), разместить его на веб-сервере и включить его в сборки с помощью apply from: "http://..."
или написать двоичный плагин (класс реализуя org.gradle.api.Plugin
), публикуйте его как Jar в репозитории и включите его в сборки с помощью apply plugin: ...
и buildscript {}
. Подробнее см. В Gradle Руководство пользователя и множество образцов в полном дистрибутиве Gradle.
Ограничение тока script (но не двоичных) плагинов заключается в том, что они не кэшируются. Поэтому сборка будет успешной только в том случае, если она сможет подключиться к веб-серверу, обслуживающему плагин.
Что касается вашего второго вопроса (который должен был быть отдельным вопросом), есть несколько доступных плагинов для сторонних разработчиков, например https://github.com/townsfolk/gradle-release.
Ответ 2
Плагин io.spring.dependency-management позволяет использовать Maven для управления зависимостями сборки:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE"
}
}
apply plugin: "io.spring.dependency-management"
Затем вы можете использовать его для импорта ботинка Maven:
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:1.1.1.RELEASE'
}
}
Теперь вы можете импортировать зависимости без указания номера версии:
dependencies {
compile 'org.springframework:spring-core'
}
Ответ 3
Мне тоже нужен этот тип функции, я создал плагин для этого: https://github.com/boxheed/gradle-pater-build-plugin
Ответ 4
Вы можете легко преобразовать содержимое родительского pom в Gradle файл инициализации.
Gradle init script предоставляет ту же функциональность, что и Maven super/parent pom. Основное отличие состоит в том, что вы можете вызвать init script
Время выполнения Как и многие из них Это дает нам гибкость для изменения init script во время выполнения, но сомневаюсь в том, что вы не отслеживаете изменения.
Вам нужно взять репозиторий, управление распределением, профилирование и другие проверки, такие как findbugs, checkstyle и т.д. в init script.
Подробности огромны, здесь вы можете найти полную информацию.
http://www.scmtechblog.net/2015/12/how-to-migrate-parent-pom-from-maven-to.html
Я объяснил о выпуске плагина Gradle, который похож на плагин релиза maven.
Ответ 5
чтобы достичь вашей цели, вы можете применить концепцию "сборка мультипроектов", описанную в руководстве пользователя gradel здесь
В принципе вы можете создать зонтичный проект, который определяет набор общих конфигураций, создавая файл gradle.build и файл gradle.settings.
Файл сборки содержит свойства, зависимости и плагины для всех проектов, settings.gradle определяет, какие подпроекты наследуют эти конфигурации.
Кроме того, чтобы иметь представление о экосистеме плагинов gradle, вы можете проверить этот источник.
Ответ 6
В настоящее время невозможно, если вы хотите, чтобы родительский кешировался локально и хранился в репозитории Maven.
Я добавил запрос функции здесь:
http://forums.gradle.org/gradle/topics/support_for_gradle_parent_shared_between_projects_cached_locally
Ответ 7
Я думаю, что лучший способ сделать что-то вроде maven parent pom - использовать gradle "apply from".
Что-то вроде этого:
allprojects { // or: subprojects { ... }
apply from: "gradle/script/common.gradle"
}
Ссылка и быть связанным путем или URL-адресом. Надеюсь, что это поможет.
Справка:
Импортировать gradle script из корня в подпроекты
Супер POM, Родительский тип управления иерархией POM в Gradle