Ohjelmistojen testaus ja hallinta Gradle
Perinteiset koontityökalut Ant Maven 2
Maven XML-pohjaiset koontitiedostot (pom.xml) Pohjautuu käytäntöihin (vain poikkeukset käytännöistä kirjoitetaan koontitiedostoon) Projektilla tietynlainen hakemistorakenne Projekteilla tietyt työvaiheet Lähdekoodien haku versionhallinnasta Lähdekoodien kääntäminen Testien ajaminen Toiminnallisuutta saa liitännäisten (plugin) avulla Osaa hakea liitännäiset keskitetystä tietovarastosta (repository) 3
Maven Maven on laaja ja hankala Ei taivu kovin hyvin erilaisiin projekteihin, jos poiketaan Mavenin käytännöistä. 4
Maven esimerkki Esimerkissä yksinkertainen Maven koonti Projektissa toteltu Mavenin käytäntöjä, joten itse koontitiedostossa ei ole juuri mitään 5
Ant XML-pohjaiset koontitiedostot Toisin kuin Maven, Ant ei oleta mitään käytäntöjä Taipuu hyvin erilaisiin projekteihin Kaikki joudutaan itse määrittelemään Mistä löytyy sovelluskoodit ja testit Mitä niille tehdään ja missä järjestyksessä Ei osaa itse hakea riippuvuuksia repositoryista Voidaan käyttää apuna Ivy-työkalua Esimerkissä yksinkertainen Ant-koonti Kaikki jouduttu itse määrittelemään 6
7
Gradle Gradle on koontityökalu, joka pyrkii yhdistelemään Mavenin ja Antin hyviä puolia. Mavenin tapaan Gradlella käytäntöjä Käytännöistä poikkeaminen kerrottava koontitiedostosssa Koontitiedosto (build.gradle) Groovyskriptikielellä Osaa hakea riippuvuuksia sekä Ivyn että Mavenin repositorioista 8
Yhteensopivuus Gradle tukee sellaisenaan Antin taskien importtaamista Esimerkki: checkstyle-taskin hakeminen Antista task checkthestyle << { //Taskin lataus ant.taskdef(resource: 'checkstyletask.properties') { classpath { fileset(dir: 'libs/checkstyle', includes: '*.jar') } } //Taskin käyttö ant.checkstyle(config: 'src/tools/sun_checks.xml') { fileset(dir: 'src') } } Myös Maveniin löytyy plugin 9
Groovy Groovy on olio-ohjelmointikieli Java-alustalle Yleisimmin käytetty skriptauskielenä Javaohjelmille, esimerkiksi Gradlelle Kääntyy Java virtuaalikoneella ajettavaksi tavukoodiksi http://groovy.codehaus.org/beginners+tutori al 10
Gradle Kun Antissa kirjoitetaan targetteja, Gradlessa voi tehdä taskeja. Tietyn taskin ajaminen komentoriviltä komennolla gradle <taskin_nimi> 11
Hello world Gradlella task helloworld << { println 'Hello world!' } Tämän taskin ajaminen komentoriviltä tapahtuisi komennolla gradle helloworld Tulostaa rivin Hello World! 12
Taskien riippuvuudet Taskit voivat olla riippuvaisia toisista taskeista Aivan kuten Antissa targetit riippuivat toisistaan. task uusitask(dependson: helloworld) << { println Tämä task on riippuvainen helloworld-taskista' } Kun komentoriviltä ajetaan gradle uusitask, tulostuu ensin Hello World! ja sen jälkeen Tämä task on riipuvainen helloworld-taskista 13
Taskit Usein ei tarvetta tehdä ollenkaan omia taskeja Taskiin voi myös lisätä toiminnallisuutta jälkikäteen (esimerkki seuraavalla sivulla) 14
Esimerkki task hello hello << { print 'Hello ' } hello << { println 'World!' } Esimerkissä luodaan task, sen jälkeen lisätään taskiin rivin Hello tulostus ja sen jälkeen vielä rivin World! tulostus. Tämä voidaan taas ajaa komentoriviltä komennolla gradle hello, jolloin tulostuu Hello World! 15
Liitännäiset Omien taskien lisääminen ei välttämättä ole tarpeellista. Liitännäisten avulla saadaan valmiita taskeja, erilaisten asioiden toteuttamista varten. Esim. Java-pluginilla saadaan Javankääntämiseen liittyviä taskeja. Java-pluginilla saadaan esimerkiksi seuraavat taskit build kääntää lähdekoodit jar kokoaa jar-paketin javadoc generoi Javadocit 16
Liitännäiset Jos projekti on käytänteiden mukainen on yksinkertaisin Java-koonti siis pelkästään apply plugin: java Gradle etsii oletuksena java-lähdekoodeja src/main/java-hakemistosta ja testejä src/test/java Jos projektin rakenne on erilainen, on se määriteltävä koontitiedostossa. 17
sourcesetit Jos lähdekoodit ja testit ovat jossain muualla tulee ne määritellä erikseen sourcesettien avulla Esimerkissä lähdekoodit löytyvät hakemistosta src ja testit hakemistosta test 18
Repository Gradle osaa hakea riippuvuudet tietovarastosta Gradle tukee sekä Mavenin että Antin tietovarastoja Jos halutaan käyttää Mavenin keskustietovarastoa, määritetään se koontitiedostossa seuraavasti repositories { mavencentral() } 19
Erillaisia liitännäisiä MavenCentralissa on suuri määrä erilaisia plugineja Plugineja löytyy esimerkiksi erilaisille laaduntarkastustyökaluille pmd joka analysoi koodinlaatua findbugs etsii bugeja koodista 20
Esimerkki build.gradle apply plugin: 'java repositories { mavencentral() } dependencies { testcompile 'junit:junit:4.10' } Esimerkin koonnissa kerrotaan että käytetään java-pluginia, riippuvuudet haetaan Mavenin keskusrepositorysta ja että testcompile task on riippuvainen junitin versiosta 4.10. Ajamalla komentoriviltä gradle test, kääntää Gradle lähdekoodit, ajaa testit ja luo testien perusteella raportit 21
Gradle tasks Koonnissa saatavilla olevat taskit saadaan selville ajamalla komentoriviltä gradle tasks Seuraavalla sivulla lista taskeista, kun koonnissa käytetään Java-pluginia. 22
Gradle tasks Esimerkkitulostus: :compilejava :processresources :classes :jar :assemble :compiletestjava :process :TestResources :testclasses :test :check :build 23