Jag är ett ”huge fan of Maven”. Jag skall dock villigt erkänna att jag suttit djupt ner i transitive dependencies-träsket och lite tyst svurit ”fy fan för Maven”. På e-postlistan för CITCON snackas det om många olika aspekter av byggande, testande, artifakthantering och sjösättning (deployment) och emellanåt dyker det upp tips om nya och gamla verktyg. Idag stötte jag på byggverktyget Gradle.

Tanken bakom Gradle är att man med ett DSL (inte XML) som är baserat på Groovy skall kunna både återfå kontrollen över bygget men också förlita sig på build-by-convention. Det säger sig kunna lösa transitiva beroenden med hjälp av Apache Ivy, stödja Ant tasks rakt av och en hel del annat. I dokumentationen sticker man inte under stol med att det också saknas en del. Det går t ex inte att generera projektfiler för Eclipse, IntelliJ IDEA och andra utvecklingsmiljöer.

Jag saknar dock mer. För att jag skall ägna tid åt att verkligen utvärdera detta som ett alternativ till Maven saknar jag en sak som jag inte vill vara utan: rapporter (site:site). Om de väl får in detta by-convention så skall jag ta en titt till.

Det finns dock aspekter av Maven som haltar, där ett annat alternativ som kanske är bättre skulle göra att vågskålen slår över åt andra hållet. Jag tänker på:

* hastighet – det är fortfarande singeltrådad upplösning av beroenden och nedladdning
bättre stöd för integrationstest – eller bara fler testfaser/teststeg: jag vill inte blanda enhetstest-körningen med andra sorters test, men heller inte skapa eget projekt/modul för den koden och de resurser som behövs för t ex just integrationstest

* dokumentation – är mycket bättre än det var för ett tag sedan, men det finns ingen holy grail över var man kan vända sig efter att google-träff 100 leder ut i blindo

* plugin-stabilitet – är mycket bättre än det var för ett tag sedan, men det finns ingen holy grail här för att se vilka plugins som är ”stabila” med varandra (-U brukar lösa de flesta problem, men scpexe-saker var länge odrägligt jobbigt att få rätt)

* enkelhet att göra avsteg – vid de stackars få tillfällen man vill göra avsteg från mavens konvention så är det mycket svett och tårar som behövs då svaret oftast är ”bygg din egen plugin”

    Det som för mig gör Maven så attraktivt är det grundläggande konceptet om att man inte har byggskript. Gradle skapar ett slags mellanting – konfiguration genom DSL, men också byggskript genom groovy.

    Byggskript ser jag ännu som något ont mer än något gott och för mycket av det goda från Maven saknas i Gradle (vad jag kan se). Så jag kommer fortsätta hylla Maven, men i det nödfall då man måste falla tillbaka till något annat kanske Gradle är ett bättre alternativ än t ex Ant.

    PS. XML är bara trevligt i viss omfattning. Jag har sett ett intressant exempel på hur man kan använda yaml och lite ruby för att generera pom-filen, men inte sett någon bygga om maven så den klarar yaml rakt av. DS

    PPS. All heder, ära, uppmärksamhet osv åt Don Brown och hans försök att ”fixa maven”. DS