Gradle и Maven имеют много общего, например, получение координатMaven中采用groupId,Gradle中采用groupДля настройки и управления зависимостями, но я должен сказать, что Gradle действительно более мощный, чем Maven.В целом, Gradle использует преимущества как Maven, так и Ant.Следующее официальное руководство поможет вам начать работу с Gradle.
Начало работы с Gradle (перевод с официального сайта Gradle)
Таким образом, это может быть знакомо.Я пытаюсь объяснить разницу между Gradle и Maven, потому что многие люди в основном переходят с Maven на Gradle, или они узнали о Maven раньше, и редактор использовал его раньше.Maven, теперь используя Грейдл.
1. В ГрейдлеProject
1,Projectчто это?
Прежде всего, мы должны понимать, что Maven и Gradle являются инструментами управления проектами, поэтому очевидно,项目являются их основными компонентами или, альтернативно,项目сказать工程, по сути то же самое. В Gradle проект — этоProject, это может быть абстрактно, если я скажу вамProjectЭто интерфейс к исходному коду Gradle, и мы можем программно обрабатывать все функции Gradle (например, управление зависимостями), как вы понимаете.
2. Как мы используемProject?
Очевидный вопрос: нужно ли нам программировать для работы с Gradle? Ответ — нет, если вы прочитали вводное руководство выше, вы должны знать, что существует проект Gradle под названиемbuild.gradleФайл, да, этот файл является конфигурационным файлом проекта Gradle, и он один к одному, проект Gradle имеет один и только одинbuild.gradleконфигурационный файл.
Это то же самое, что и Maven, каждому проекту соответствует одинpom.xmlдокумент
3. На чем основан Gradlebuild.gradleФайл конфигурации управляет жизненным циклом нашего проекта, т.е. что это такое?
На этапе инициализации сборки Gradlebuild.gradleОбщий процесс сборки проекта выглядит следующим образом:
- 1. Создайте
SettingsНапример, если проект Gradle подsettings.gradleфайл существует, файл будет проанализирован вSettingsпример - 2. Согласно
settings.gradleфайл для настройки проекта - 3. Используйте
Settingsсоздание экземпляраProjectструктура экземпляра - 4. Наконец, оцените каждый проект, выполнив файл build.gradle для проекта (если он существует).
4.build.gradleКак настраиваются файлы
Вы, вероятно, задаетесь вопросом, как я справляюсь сbuild.gradleДля настройки, прежде всего, вы уже знаете, что проект соответствуетbuild.gradleфайл, то естьbuild.gradleфайл соответствуетProjectнапример, тогдаProjectУ экземпляров есть свойства, которые вы можете использовать.
существуетbuild.gradleиспользуется в файлеDSLЧтобы настроить, вот что вы можете сделать вbuild.gradleСодержимое настроено в файле:
-
TaskTask— своего рода задача, задача — базовый компонент в Gradle,TaskКонцепция также полученаAntвдохновлен -
Dependenciesуправление зависимостями
-
Pluginsплагины, как в Maven
pom.xmlТак же, как добавление плагинов в файл, Gradle также может добавлять плагины.Обычные плагины включают в себя:java,eclipse, мы можем использоватьapply plugin: 'java'Загрузить плагин -
Propertiesконфигурация свойства
-
MethodsНастройте метод, Нани, файл конфигурации может настроить метод, вы шутите! Да, это все
DSLочарование,DSLвстроенная поддержкаGroovyЭтот язык сценариев, таким образом, мы можемbuild.gradleЗапишите соответствующее соответствие в файлgroovyсинтаксический код, то есть, другими словами,build.gradleФайл вышел за рамки файла конфигурации и больше похож на файл сценария, который является более мощным, чем файл конфигурации. -
Script BlocksБлоки сценариев — это мощная функция, специфичная для Gradle. На самом деле вышеизложенное
build.gradleФайл эквивалентен файлу сценария, поэтому появление блоков сценария неудивительно. Обычно используются следующие блоки сценариев:-
allprojectsОбщая конфигурация для всех проектов (включая подпроекты) в многопроектном проекте
-
antподдержка муравья
-
artifactsПоддержка создания артефактов, таких как создание пакета jar.
-
buildscriptвоплощать в жизнь
gradle buildКонфигурация, связанная с командами, в основном настройка выходного каталога сборки, ссылочного хранилища и другой информации. -
configurationsОбеспечивает поддержку управления зависимостями
-
dependenciesОбъявление зависимостей и конфигурация
-
repositoriesконфигурация склада
-
subprojectsОбщая конфигурация для всех подпроектов в мультипроекте
-
Во-вторых, в GradleProperties
1. Свойства в Gradle
Градл в соответствии сProjectЭкземпляр выполняет файл сборки проекта для настройки проекта. Любое свойство или метод, используемый вашим сценарием, делегируется связанномуProjectобъект. Что это обозначает? Это означает, что вы можете использовать его непосредственно в скрипте.ProjectЛюбые методы и свойства на интерфейсе.
Например:
defaultTasks('some-task') // Delegates to Project.defaultTasks()
reportsDir = file('reports') // Delegates to Project.file() and the Java Plugin
Вышеупомянутое настраивает метод и свойство в скрипте, оба из которых будут применяться кProjectэкземпляр вверх.
Конечно, вы также можете использоватьprojectатрибут для представленияProject, даже используяprojectпрямо кProjectВызываются соответствующие методы свойств экземпляра, что в некоторых случаях может сделать сценарий более понятным. Например, вы можете использоватьproject.nameвместоnameдля доступа к имени проекта.
ОдинprojectБудет искать связанные свойства из 5 областей, к которым вы можете получить доступ по имени в файле сборки или позвонив в проектProject.property(java.lang.String)Эти свойства метода пяти областей следующие:
-
1,
Projectсам.Эта сфера включает
ProjectРеализует любое свойство, объявленное классомsetterиgetterметод. Например, мы можем пройтиProject.getRootProject()можно использовать какrootProjectстоимость имущества. согласно соответствующемуgetterилиsetterСуществование методов, свойств этой области видимости доступны для чтения или записи. -
2,
projectизextraАтрибутыКаждый проект поддерживает
extraКарта свойств, которая может содержать произвольные пары имя->значение. После определения свойства этой области также доступны для чтения и записи. -
3. Добавьте плагин в расширенные свойства проекта
Каждое расширение доступно как свойство только для чтения с тем же именем, что и расширение.
-
4. Конвенционные свойства, добавленные в проект плагином
Плагины доступны через проект
ConventionОбъекты добавляют в проект свойства и методы. Свойства области могут быть доступны для чтения или записи, в зависимости от объекта контракта. -
5.
taskкак атрибутДоступ к задаче можно получить, используя ее имя в качестве имени свойства. Свойства этой области доступны только для чтения. Например, названный
compileзадание можно использовать какcompileдоступ к собственности.
extraСвойства и условные свойства наследуются от родительского проекта рекурсивно в корневой проект. Свойства этой области доступны только для чтения.
При чтении свойства элемент ищет указанные выше диапазоны по порядку и возвращает значение из первого диапазона, в котором найдено свойство. Если свойство не найдено, Gradle сообщит об ошибке.
При установке свойства проект ищет указанные выше области по порядку и устанавливает свойство в первой области, в которой оно найдено.
2,ExtraАтрибуты
всеExtraатрибут должен пройтиextпространство имен для определения. Как только вы определитеExtraсвойства, которые доступны непосредственно в объекте-владельце (в приведенном ниже примере проект, задача и подпроект соответственно) и могут быть прочитаны и обновлены.ExtraАтрибуты доступны только через пространства именextЕго можно использовать после объявления и инициализации.
Например, в следующем списке перечислены три разные областиExtraАтрибуты:
// Project本身
project.ext.prop1 = "foo"
// 任务
task doStuff {
ext.prop2 = "bar"
}
// 子项目下
subprojects { ext.${prop3} = false }
читатьExtraсвойства проходят черезextили через принадлежащий объект.
ext.isSnapshot = version.endsWith("-SNAPSHOT")
if (isSnapshot) {
// do snapshot stuff
}
Другие свойства могут быть найденыздесь
Три, конфигурация Gradle простой многопроектный проект
ПроектSpring bootИнженерия, мы можем пройтиhttp://start.spring.io/Загрузка конфигурации, основной проект содержит три подпроекта, а именноmyapp-controller,myapp-service,myapp-dao
Схема структуры проекта выглядит следующим образом:
в корневом каталогеsettings.gradle
rootProject.name = 'myapp'
include 'myapp-controller'
include 'myapp-service'
include 'myapp-dao'
build.gradle
// 构建脚本
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
// 所有项目共有的配置
allprojects {
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
}
по каждому подпроектуbuide.gradle
description = 'myapp-controller'
dependencies {
// 该子工程包含另外一个子工程
compile project(':myapp-dao')
}