Zur Qualitätssicherung eines Softwareprojekts gehören neben Unittests auch statische Codeanalysen. Tools wie Checkstyle, Findbugs oder PMD untersuchen Java-Klassen und bewerten den Code anhand verschiedener Metriken.
Zwar können diese Checks einen manuellen Codereview nicht ersetzen, aber Standardfehler und bekannte Anti-Patterns werden zuverlässig erkannt. Für jedes der genannten Tools gibt es ein Eclipse-Plugin, das die betreffenden Codestellen markiert. Die Anzeige der Fehler ist aber nicht ausreichend: Bei schwerwiegenden Verstössen soll auch der Build scheitern, ansonsten besteht die Gefahr, dass der Code nicht korrigiert wird. Aber wie kann man das umsetzen ?
Mit Maven 2 geht dies einfach mit einer Plugin-Konfiguration innerhalb des “build”-Elements.
Hier ein Projektbeispiel für die PMD Analyse:
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-pmd-plugin</artifactId>
- <configuration>
- <sourceEncoding>${file.encoding}</sourceEncoding>
- <minimumTokens>100</minimumTokens>
- <targetJdk>${java.target.version}</targetJdk>
- <failOnViolation>true</failOnViolation>
- <failurePriority>2</failurePriority>
- </configuration>
- <version>${pmd.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>check</goal>
- <goal>cpd-check</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
Mit dieser einfachen Konfiguration wird sichergestellt, dass der Code keine PMD-Verstösse der Kategorie 1 und 2 enthält. Zudem ist garantiert, dass der Build bei Copy&Paste von 100 Wörtern (bzw. Tokens) scheitert. Praktisch !