Ömer ÖZKAN [email protected]
Ömer Ö[email protected]
Hakkımda
● Yazılım Mühendisi
● OpsGenie
● Kurumsal Java
● Back-End Development & Operations
İletişim
● omerozkan.net
● @omerozkan_
● linkedin.com/in/omerozkan
● github.com/omerozkan
İnşa (Build) Sistemi Nedir?
● Derleme (compile)
● Paketleme (package)
● Test
● Bağımlılık Yönetimi (dependency management)
● Doküman üretme
● Deployment
● Daha fazlası?
İnşa Sistemleri
● Ant
● Maven
● Grape
● Make
● Rake
● SBT
● GRADLE
ANT
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
MAVEN
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
GRADLE
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
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'
Bağımlılık Yönetimi
● Maven ve Ivy depoları uzak depo olaraktanımlanabilir.
...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:+'}
Task
● clean
● compileJava
● compileTestJava
● test
● check
● jar
● javadoc
● build
● build -x test
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}...
Maven Eklentisi
gradle install
● Maven'a uygun pom.xml üretir.
● Üretilen jar dosyasını Maven yerel deposuna(.m2/repository) yükler.
apply plugin: 'maven'
uploadArchive
● Derlenen paketler istenilen Maven deposunadeploy edilebilir.
apply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: url) { authentication(userName: "username",password: "password") } } }}
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!"}
Gradle Task
● Tasklar için type tanımı yapılabilir
task packageZip(type: Zip) { from "${buildDir}/zip" baseName = 'package-name'}
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: '/') }}
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
Gradle Wrapper
● Wrapper'ı aktif etmek için:
task wrapper(type: Wrapper) { gradleVersion = 2.3}
● Satırları ekledikten sonra:
gradle wrapperkomutunu çalıştırmak yeterlidir.
Gradle Wrapper
● Daha sonra üretilen scriptleri kullanarak gradle'ıkullanabilirsiniz.
./gradlew clean build (Linux ve OS X)
gradlew.bat clean build (Windows sistemler)
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
Jenkins ve Gradle