Maven
Deze tutorial gaat over het ontwikkelen van software(projecten) met behulp van Maven 2. Maven 1.x (wat totaal anders werkt) laat ik buiten beschouwing.
Naast het schrijven van code bestaat het ontwikkelen van software uit het compileren, het beheren van dependencies op bepaalde jar's en het bieden van mogelijkheden om te deployen.
Om dit te automatiseren wordt ook wel
Ant gebruikt.
Maven is echter die nieuwe, uitgebreide, variant hiervan.
Maven installeren
Laten we beginnen met het downloaden en uitpakken van de Maven applicatie:
de Download Maven 2.0.4 pagina
Maven gebruiken om te compileren (minimale opzet)
Maak een map aan met de naam van het project (in de rest van het voorbeeld genoemd '%proj_dir%\').
Hierin maak je de volgende dir:
%proj_dir%\src\ en daar plaats al je applicatie java bestanden en/of packages in.
Maak een bestand '%proj_dir%\compile.bat' met erin:
Code:
set path=C:\test\maven-2.0.4\bin\;%path%
set java_home=C:\Program Files\Java\jdk1.5.0_04
set MAVEN_BATCH_PAUSE=on
mvn compile
(laat de paden wijzen naar respectievelijk je Maven dir en je Java dir)
En maak een bestand '%proj_dir%\run.bat' met erin:
Code:
java -classpath ./target/classes/ Main
pause
Aangenomen dat Main je java bestand is om je applicatie mee op te starten.
Maak tot slot een bestand '%proj_dir%\pom.xml' met erin:
Code:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Tuples</groupId>
<version>1.0</version>
<artifactId>Tuples</artifactId>
<build>
<sourceDirectory>${basedir}/src/</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Die source+target en configuration mag weggelaten worden als ook lagere versies van Java gebruikt mogen worden. Noem vervolgens de 'groupId' en 'artifactId' bovenin naar iets toepasselijks op de applicatie.
Voer nu de compile.bat uit.
Nu begint Maven van alles te downloaden en te doen.
(de gedownloade bestanden komen trouwens te staan in: ~/.m2/repository/ of C:\Documents and Settings\User\.m2\repository\)
Dit zal overigens eindigen met een BUILD ERROR, maar blijf de compile.bat uitvoeren totdat je een BUILD SUCCESSFUL krijgt.
Nu kun je de run.bat uitvoeren voor het resultaat ;)
Download het complete Tuple voorbeeld op:
Basic Maven.
(Gebruik de 'save all' knop omdat die ook de juiste directories aanmaakt !)
Uitgebreidere projecten
In deze stap gaan we JUnit tests toevoegen en een website met overzichten laten genereren.
Nu is het tijd om een geschikte directory indeling te maken.
Laten we in deze tutorial het Tuple voorbeeld te nemen uit
Java 1.5 tutorial - Generics.
Maak (wederom) een map aan met de naam van het project.
Hierin maak je de volgende dirs:
%proj_dir%\src\main\java
%proj_dir%\src\test\java
Plaats al je applicatie java bestanden in '%proj_dir%\src\main\java'.
De '%proj_dir%\src\test\java' zal de java bestanden gaan bevatten met JUnit tests. JUnit tests zijn kleine tests die bepaald gedrag van je objecten test.
Een test om de tuple te testen zou kunnen zijn:
Code:
import junit.framework.TestCase;
public class TupleTest extends TestCase
{
public TupleTest() {}
public void testTupleCreation()
{
Tuple<String, String> objectTuple = new Tuple<String, String>("fstString", "sndString");
String fst = objectTuple.getFst();
String snd = objectTuple.getSnd();
assertNotNull(objectTuple);
assertTrue( objectTuple instanceof Tuple );
assertEquals("fstString", fst);
assertEquals("sndString", snd);
}
}
Wanneer een assert faalt komt dit voor in de JUnit statistieken.
Voor deze uitgebreide versie zijn een flink aantal bestanden nodig. Download daarom de volgende bestanden:
Tuple sources with advanced Maven (Gebruik de 'save all' knop omdat die ook de juiste directories aanmaakt !).
Het tuple voorbeeld bevat dus een aantal bestanden. Een pom.xml die Maven verteld wat te doen, een checkstyle.xml om een checkstyle report te genereren (komt later nog aan de orde), en een aantal uitvoerbare bestanden om Maven aan te roepen.
Maar eerst, voer de test.bat en report.bat uit totdat je een BUILD SUCCESSFUL krijgt.
In de gegenereerde target/site dir staat nu een index.html. Bekijk deze en klik op Project Reports. Nu verschijnen er een linkjes naar Checkstyle, Clover etc.. Klik hierop om de overzichten van de resultaten in te zien.
Kwaliteit van software wordt verbeterd dmv:
- Checkstyle - die dingen aangeeft als 'teveel regels per methode' etc
- JUnit - tests overzicht (met name welke tests gefaald zijn)
- FindBugs - voor slechte programmeerstructuren (in dit voorbeeld uitgeschakeld)
- Clover - om te tonen hoeveel procent van de code door de junit tests daadwerkelijk getest worden (30 dagen trial)
- CPD - om code duplicatie te detecteren
- PMD - om potentiële problemen te vinden
- Simian - voor code duplicatie
Deze plugins kunnen worden toegevoegd of verwijderd in de pom.xml. FindBugs is in dit voorbeeld uitgecommentariseerd. De reden hiervoor is een bug.
Uitleg hiervoor staat ook in de pom.xml:
Code:
<!-- To get the following plugin to work, you have to 'hack' this next thing
edit:
~/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom
C:\Documents and Settings\User\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.pom
find:
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1-beta-6</version>
<optional>true</optional>
</dependency>
remove or comment the optional line !
-->
Wil je dus FindBugs inschakelen, haal dan de <!-- en --> weg om:
Code:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<threshold>Normal</threshold>
</configuration>
</plugin>
Vervolgens moet je de '<optional>true</optional>' weghalen uit: C:\Documents and Settings\User\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.pom.
Run nu report.bat en de FindBugs wordt netjes in de website weergegeven.
Checkstyle controleert dingen als maximaal aantal regels per methode, maximaal aantal regels per bestand, teveel geneste lussen etc. Deze waardes vallen in te stellen en daar komt de checkstyle.xml om de hoek kijken. Deze bepaalt welke controles uitgevoerd worden met welke limieten.
De gegenereerde website ziet er dan als volgt uit:
Resultaat
Tot slot wil ik het belang van
Subversion (SVN) en
ToirtoiseSVN benadrukken. Iedere serieuse programmeur kan niet zonder (lees ook
dit overzicht). Ook voor je eigen projectjes op je thuis-pc is het erg handig. Niet langer dingen uitcommentariseren (gewoon dingen verwijderen want het staat toch in het versiebeheersysteem), meerdere mapjes met verschillende versies bijhouden of dingen kwijtraken.
Bronnen:
Maven Getting Started Guide