onsdag 13 juni 2012

Hej

Jag tänkte följa upp min föreläsning om Gradle på senaste mötet.

Tänk er följande scenario... vi utvecklar en web-applikation som kräver vissa externa resurser. När jag utvecklar applikationen har jag alla dessa resurser på min egen maskin. När kunden testar så har de en speciell testmiljö, och de har även en helt separat driftsmiljö. Jag behöver alltså kunna köra applikationen lokalt i min IDE under utveckling, samt bygga en specifik WAR för testmiljön resp. driftsmiljön.

Hur gör man det i Gradle?

I mitt exempelprojekt så är de externa resurserna definierade i filen system.properties. Just den filen används när jag kör lokalt. För att få rätt inställningar för t.ex. testmiljön så har jag en annan fil, system-test.properties, som jag ska använda istället för den vanliga system.properties. I driftsmiljön gör jag på samma vis med filen system-prod.properties.



build.gradle

apply plugin: 'war'


webAppDirName = 'WebContent'


war {
  excludes = [ '**/system*.properties' ]


  webInf {
  from ("$webAppDirName/WEB-INF") {
  include ("system-" + target + ".properties")
  rename { String fileName -> fileName.replace("-" + target, '') }
  }
  }
}


Först konfigurerar vi Gradle för att bygga en WAR

Eftersom jag använder Eclipse som IDE och deras standardnamn och filstruktur, så måste jag definiera en property, webAppDirName, som används av WAR plugin'en.


Nu är det dags att konfigurera "task" war.
Jag börjar med att exkluderar alla properties-filerna. Sedan inkluderar jag enbart den properties-fil som jag är intresserad av, dvs. "system-" + target + ".properties" där target är en variabel som definieras senare. Till sist döper jag om filen till rätt namn genom att ta bort target ur namnet.

Det är allt som behövs i skript väg!

Nu återstår bara att definiera variabeln target och att bygga. Starta cmd.exe

> gradle -Ptarget=test war

eller

> gradle -Ptarget=prod war

Det var allt som morsan skickade med!

PS. En liten tanke som jag har haft länge...
Varför finns det inga open-source refactoring-verktyg för databaser?

/Anders





Inga kommentarer:

Skicka en kommentar