Серия Gradle Learning ---- Многопроектная конструкция

задняя часть Android maven gradle
Серия Gradle Learning ---- Многопроектная конструкция

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Содержимое настроено в файле:

  • Task

    Task— своего рода задача, задача — базовый компонент в Gradle,TaskКонцепция также полученаAntвдохновлен

  • Dependencies

    управление зависимостями

  • Plugins

    плагины, как в Mavenpom.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')
}