gradle ile proje insası

27
Ömer ÖZKAN [email protected]

Upload: oemer-oezkan

Post on 20-Jul-2015

1.102 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Gradle ile Proje Insası

Ömer Ö[email protected]

Page 2: Gradle ile Proje Insası

Hakkımda

● Yazılım Mühendisi

● OpsGenie

● Kurumsal Java

● Back-End Development & Operations

Page 3: Gradle ile Proje Insası

İletişim

[email protected]

● omerozkan.net

● @omerozkan_

● linkedin.com/in/omerozkan

● github.com/omerozkan

Page 4: Gradle ile Proje Insası

İnşa (Build) Sistemi Nedir?

● Derleme (compile)

● Paketleme (package)

● Test

● Bağımlılık Yönetimi (dependency management)

● Doküman üretme

● Deployment

● Daha fazlası?

Page 5: Gradle ile Proje Insası

İnşa Sistemleri

● Ant

● Maven

● Grape

● Make

● Rake

● SBT

● GRADLE

Page 6: Gradle ile Proje Insası

ANT

Page 7: Gradle ile Proje Insası

Ant

● Oldukça esnek

● XML ile yapılandırma (build.xml)

● Yapılandırması zor (Maven ve Gradle'a göre)

● Bağımlılık yönetimi ivy ile yapılır

Page 8: Gradle ile Proje Insası

MAVEN

Page 9: Gradle ile Proje Insası

Maven

● Ant ile kıyaslandığında basit ve kolay

● XML ile yapılandırma (pom.xml)

● Bağımlılık yönetimi

● Defacto

● Ant kadar esnek değil

Page 10: Gradle ile Proje Insası

GRADLE

Page 11: Gradle ile Proje Insası

Gradle

● Ant-ivy üzerine geliştirildi

● Oldukça esnek (Ant)

● Basit ve kolay yapılandırma (Maven)

● XML yerine Groovy ile yapılandırma

● Maven ve Ant ile uyumlu

● Son zamanlarda oldukça popüler

● Android için varsayılan inşa sistemi

● Güncel versiyon: 2.3

Page 12: Gradle ile Proje Insası

Java Plugin

● Java projeleri için derleme, paketleme, testetme, bağımlılık yönetimi gibi özellikleri sağlar.

apply plugin: 'java'

sourceCompatibility = 1.7name = 'a-project'version = '1.0.0-SNAPSHOT'group = 'net.omerozkan.gradle'

Page 13: Gradle ile Proje Insası

Bağımlılık Yönetimi

● Maven ve Ivy depoları uzak depo olaraktanımlanabilir.

Page 14: Gradle ile Proje Insası

...repositories { mavenCentral() jcenter()

mavenLocal() maven { url "http://repository.sifirbir.org" } ivy { url "file:///home/omerozkan/ivy-depo" }}

dependencies { compile 'org.apache.commons:commons-lang3:3.3.2' compile 'org.codehaus.jackson:jackson-lgpl:0.9.5' runtime 'org.apache.tomcat:tomcat:8.0.21'

testCompile group: 'junit', name: 'junit', version:'4.11' testRuntime 'org.dbunit:dbunit:+'}

Page 15: Gradle ile Proje Insası

Task

● clean

● compileJava

● compileTestJava

● test

● check

● jar

● javadoc

● build

● build -x test

Page 16: Gradle ile Proje Insası

Test

● Testlerden biri başarısız olduğunda

– Bir sonraki task koşturulmaz

– BUILD FAILED

● Başarısız testleri göz ardı etmek için

...test { ignoreFailures = true}...

Page 17: Gradle ile Proje Insası

Maven Eklentisi

gradle install

● Maven'a uygun pom.xml üretir.

● Üretilen jar dosyasını Maven yerel deposuna(.m2/repository) yükler.

apply plugin: 'maven'

Page 18: Gradle ile Proje Insası

uploadArchive

● Derlenen paketler istenilen Maven deposunadeploy edilebilir.

apply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: url) { authentication(userName: "username",password: "password") } } }}

Page 19: Gradle ile Proje Insası

Gradle Task

● Eklentilerin ve Gradle'ın sunduğu tasklardışında özel tasklar eklenebilir.

task customTask(dependsOn: 'jar') << { println "CUSTOM TASK is starting now!" //you can add any code you want}customTask.doFirst { println "Do First!"}

customTask.doLast { println "Du hast!"}

Page 20: Gradle ile Proje Insası

Gradle Task

● Tasklar için type tanımı yapılabilir

task packageZip(type: Zip) { from "${buildDir}/zip" baseName = 'package-name'}

Page 21: Gradle ile Proje Insası

Ant tasks

● Gradle ile Ant task'ları koşturulabilir.configurations { debian}

dependencies { debian group: 'org.vafer', name: 'jdeb', version: '1.3'}

task deb(dependsOn: ['generateControlFiles']) << { ant { taskdef(name: 'deb', classname: 'org.vafer.jdeb.ant.DebAntTask',classpath: configurations.debian.asPath) } ant.deb(destfile: "${project.buildDir}/distributions/project_${debVersion}_all.deb", control: "controlDir") { ant.data(src: dataTarget, type: 'directory', dst: '/') }}

Page 22: Gradle ile Proje Insası

Gradle Wrapper

● Sistemde Gradle kurulu olma zorunluğunu kaldırır

● Sadece JRE veya JDK olması yeterli

● Versiyondan kaynaklanan sorunlar bu şekildegideriliyor

● Unix (Linux, OS X) sistemler için sh dosyası, Windowsiçin bat dosyası bulunduruyor.

● Gradle'ın ilgili ve tek bir jar dosyası sürüm takipsisteminde bulunuyor

Page 23: Gradle ile Proje Insası

Gradle Wrapper

● Wrapper'ı aktif etmek için:

task wrapper(type: Wrapper) { gradleVersion = 2.3}

● Satırları ekledikten sonra:

gradle wrapperkomutunu çalıştırmak yeterlidir.

Page 24: Gradle ile Proje Insası

Gradle Wrapper

● Daha sonra üretilen scriptleri kullanarak gradle'ıkullanabilirsiniz.

./gradlew clean build (Linux ve OS X)

gradlew.bat clean build (Windows sistemler)

Page 25: Gradle ile Proje Insası

Jenkins ve Gradle

Jenkins'in gradle eklentisini kullanabilirsiniz. Fakateklenti:

● Testlerin düşmesini otomatik olarak göz ardı edemiyorve işi (Job) UNSTABLE yerine FAILED statüsüne alıyor.– Çözüm: Testlerin ignoreFailure özelliğinin aktif hale

getirilmesi gerekiyor.

● Testleri otomatik olarak raporlayamıyor.– Çözüm: Testler için üretilen test raporlarını tanımlamak

Page 26: Gradle ile Proje Insası

Jenkins ve Gradle

Page 27: Gradle ile Proje Insası

SORULAR?

[email protected]

http://omerozkan.net

http://www.opsgenie.com