Многие из вас задаются вопросом, какая система сборки лучше всего подходит для вашего проекта?
Это зависит от многих факторов, включая размер вашего проекта, ваши потребности в настройке, обработку зависимостей, внешние зависимости и несколько других переменных, которые могут помочь вам выбрать. Давайте взглянем.
Gradle — это система автоматизации сборки с полностью открытым исходным кодом, в которой используются концепции других инструментов сборки, таких как Apache Maven и Apache Ant. Он поддерживает разработку и последующее развертывание с использованием Java, Scala и Groovy, а в будущем будут внедрены другие рабочие процессы и языки проекта. Это открытый исходный код и обеспечивает сквозной процесс от разработки до развертывания.
Почему стоит выбрать Gradle, а не Maven или Ant?
Более короткие сценарии
Gradle не использует XML и имеет тенденцию становиться неуправляемо большим, когда используется со всеми проектами, кроме очень маленьких. Вместо этого у него был собственный DSL на основе Groovy (один из языков JVM). В результате скрипты сборки Gradle имеют тенденцию быть намного короче и понятнее, чем написанные для Ant или Maven.
Возможности из коробки
У Gradle есть много задач, уже доступных из коробки или через плагины с открытым исходным кодом. Например, эта простая строка кода добавляет более 20 задач, ожидающих нас.
apply plugin: 'java'
гибкость
Maven предоставляет очень жесткую модель, которая делает настройку утомительной, а иногда и невозможной. Хотя это может облегчить понимание любой конкретной сборки Maven, если у вас нет особых требований, это также делает ее непригодной для многих проблем автоматизации. Настройка целей (целей) трудно в Maven. Gradle, с другой стороны, построен с учетом возможностей и ответственности пользователя.
Быстрее
Три основные функции, которые делают Gradle намного быстрее, чем Maven или Ant:
- Инкрементальность — Gradle избегает работы, отслеживая ввод и вывод задач и выполняя только то, что необходимо, и обрабатывая только те файлы, которые были изменены, когда это возможно.
- Build Cache — повторно использует выходные данные сборки любой другой сборки Gradle с теми же входными данными, в том числе между машинами.
- Gradle Daemon — долгоживущий процесс, который сохраняет информацию о сборке «горячей» в памяти.
Разработчик дружественный
Это приносит удобство основанного на Groovy DSL наряду с преимуществами Ant и Maven. С Gradle вы можете легко управлять процессом сборки и его логикой для создания нескольких версий вашего приложения. Это намного проще в использовании и намного более сжато и гибко, по сравнению с Ant или Maven.
Как создать свой первый Java-проект Gradle?
1. Запустите задачу Init
Gradle поставляется со встроенным плагином Build Init Plugin. Этот плагин выполняет много внутренних задач для создания встроенной структуры вашего Java-проекта. Теперь запустите команду:
mkdir demo-gradle
cd demo-gradle
gradle init –type java-application
init
Задача выполняет задачу обертки первой, который генерирует gradlew
и gradlew.bat
оболочку сценариев и создает проект с базовой структурой. Он генерирует build.gradle
, settings.gradle
, folder
для обертки файлов исходной папки Java по умолчанию, папка теста Java по умолчанию.
build.gradle
gradle
wrapper
gradle-wrapper.jar
gradle-wrapper.properties
gradlew
gradlew.bat
settings.gradle
src
main
java
App.java
test
java
AppTest.java
Теперь settings.gradle
присваивает имя корневого проекта demo-gradle
, который по умолчанию.
rootProject.name = 'demo-gradle'
Файл сборки добавляет плагины Java и приложений. Сгенерированный build.gradle
файл имеет много комментариев.
2. Создайте свой собственный файл Build.Gradle
Теперь build.gradle
файл может быть составлен на основе требований проекта.
apply plugin: java
repositories {
jcenter() // or mavenCentral(), google()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
mainClassName = 'App'
dependencies {
compile 'com.google.guava:guava:21.0'
testCompile 'junit:junit:4.12'
}
jar{
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}
manifest{
attributes 'Main-Class': ‘App’
}
}
В блоке репозиториев вы добавляете имена репозиториев, которые Gradle должен искать в используемых вами библиотеках.
В sourceCompatibility
и targetCompatibility
мы определяем совместимость версий Java.
Управление зависимостями в Gradle
В Gradle зависимости группируются в именованный набор зависимостей. Эти группы называются конфигурациями, и мы используем их для объявления внешних зависимостей нашего проекта. Зависимости, добавленные в конфигурацию компиляции, требуются при компиляции нашего исходного кода нашего проекта. testCompile
Конфигурация содержит зависимости, которые необходимы для составления тестов нашего проекта. Эта конфигурация содержит скомпилированные классы нашего проекта и зависимости, добавленные в конфигурацию компиляции.
configuration group-id:artifact-id:version
3. Выполнить сборку
Чтобы собрать проект, запустите команду build.
gradle build
Мы можем запустить обычную команду Gradle, но когда проект включает в себя скрипт Gradle, то лучше использовать его вместо этого.
При первом запуске сборки Gradle проверит, есть ли у вас библиотеки Guava и JUnit в вашем кэше в каталоге ~ / .gradle. Если нет, библиотеки будут загружены и сохранены там. При следующем запуске сборки будут использоваться кэшированные версии. Задача сборки компилирует классы, запускает тесты и генерирует отчет о тестировании.
4. Запустите приложение
gradle run
Задача запуска говорит Gradle выполнить метод main в классе, назначенном для mainClassName
свойства.
5. Интеграция с корзиной S3 с помощью пользовательских задач
Задачи являются краеугольным камнем в достижении цели в Gradle. Чтобы создать простую задачу Gradle, нам нужно добавить ее определение в наш build.gradle
файл:
В блоке buildscript вы определяете параметры, необходимые для сборки вашего проекта, и syncContents
создаете задачу с именем для синхронизации содержимого с s3fs с помощью плагина ‘ jp.classmethod.aws.s3
.’
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "jp.classmethod.aws:gradle-aws-plugin:0.+"
}
}
import jp.classmethod.aws.gradle.s3.CreateBucketTask;
import jp.classmethod.aws.gradle.s3.SyncTask;
import com.amazonaws.services.s3.model.ObjectMetadata;
apply plugin: 'jp.classmethod.aws.s3'
aws {
profileName = "test"
region = 'ap-northeast-1'
}
// task to create the bucket.
task createBucket(type: CreateBucketTask) {
bucketName "mybuc132"
ifNotExists true
}
// task to sync the data.
task syncContents(type: SyncTask) {
source file("build/libs") // must be directory
bucketName "mybuc132"
// to set all file's metadata "no-cache, no-store"
metadataProvider { bucket, key, file ->
ObjectMetadata m = new ObjectMetadata()
m.setCacheControl("no-cache, no-store")
return m
}
}
Чтобы выполнить эту конкретную задачу, нам нужно выполнить следующие команды:
gradle createBucket
gradle syncContents
Теперь у вас есть новый проект, который вы сгенерировали, используя плагин сборки Gradle. Наслаждайтесь!