O novém build nástroji gradle jsem již psal. Je to už rok a co se za tu dobu stalo? Gradle nám vyrostl z verze 0.2 na verzi 0.7, která je už velmi rozumně použitelná. A proto jsme se rozhodli gradle použít pro náš první projekt.
Jedná se o velmi jednoduchý projekt (matcher pro easymock). Tento projekt obsahuje 3 třídy, které je potřeba zkompilovat. Neobsahuje testy. Výsledný jar je nutno deploynout do firemní artifactory.
A jak takovéto jednuché věci dosáhnout:
usePlugin "java"
usePlugin "maven"
sourceCompatibility = 1.6
group = "cz.svt"
version = "${version}"
manifest.mainAttributes "Implementation-Title": name, "Implementation-Version": version, "Implementation-Vendor": "ČSAD SVT Praha s.r.o."
configurations {
deployerJars
}
dependencies {
compile "commons-beanutils:commons-beanutils:1.7.0"
compile "org.easymock:easymock:2.2"
compile "org.easymock:easymockclassextension:2.2.1"
deployerJars "org.apache.maven.wagon:wagon-http:1.0-beta-2"
}
repositories {
mavenRepo urls: "${artifactoryURL}/repo1"
}
uploadArchives {
repositories.mavenDeployer {
name = 'httpDeployer'
configuration = configurations.deployerJars
repository(url: "${artifactoryURL}/libs-releases-local") {
authentication userName: "${artifactoryUid}", password: "${artifactoryPwd}"
}
snapshotRepository(url: "${artifactoryURL}/libs-snapshots-local") {
authentication userName: "${artifactoryUid}", password: "${artifactoryPwd}"
}
}
}
Maven uživatel může jenom závidět, jak je tento script kompaktní a krátký. Nyní si postupně projdeme co musíme ve scriptu udělat, aby vše fungovalo.
Nejprve definujeme, které pluginy budeme používat.
java
plugin potřebujeme pro překlad Javy a
maven
pro deployment do artifactory (jedná se o maven repository).
Další 3 řádky definují, že používáme Javu 1.6, skupina deployovaného artefaktu je "cz.svt" a na verzi se odvoláváme jako na property (o těch si povíme dále). Následuje řádek s definicí manifestu (hojně používáme property dříve nastavené).
Další 3 řádky definují novou konfiguraci
deployerJars
, kterou použijeme v tasku na deployment jaru do naší sdílené firemní artifactory.
A začínáme tím zajímavým, závislostmi. Stačí nám na ně 7 řádků. Závislosti se definují podobně jako v
mavenu, ale skupiona, název, verze se oddělují dvojtečkou. Jinak gradle umí díky
ivy pracovat nejen s ivy, ale i maven repository. Poslední závislost říká, že deployování bude potřebovat
wagon-http
.
Následně defunujeme repository pro resolvování závislostí (opět pomocí property). Poslední je task
uploadArchives
, který je nejsložitější z celého scriptu. Složitost ovšem spočívá v definování rozdílné repository pro snapshoty a pro finální verze (v podstatě dvakrát to samé). Protože deployment do artifactory nemůže provést každý, je nutné specifikovat už. jméno a heslo (není přímo ve scriptu, ale je to properta).
Jak gradle resolvuje property? Gradle hledá v aktuálním adresáři soubor
gradle.properties
a dále se kouká do adresáře
$HOME/.gradle/
po stejnojmenném souboru. V těchto souborech můžeme definovat property, jenž můžeme využít v buildu. Takže v projektu uvádíme verzi a v domovském adresáři definujeme adresu repository a už. jméno a heslo.
A jaké budou další krůčky? Nejprve přidáme testy, pak generování standardních reportů (javadocs, findbugs, cobertura) a nakonec groovy, aspectj atd...