maven-plugins/checkstyle/plugin.jelly

205 lines
7.3 KiB
XML

<?xml version="1.0"?>
<!--
=============================================================================
Checkstyle plugin for Maven.
=============================================================================
-->
<project
xmlns:j="jelly:core"
xmlns:ant="jelly:ant"
xmlns:util="jelly:util"
xmlns:doc="doc">
<!--
========================================================================
Default goal.
========================================================================
-->
<goal name="checkstyle" description="Perform checkstyle checks"
prereqs="checkstyle:report"/>
<!--
========================================================================
Initializations.
========================================================================
-->
<goal name="checkstyle:init">
<j:if test="${sourcesPresent == 'true'}">
<!-- If an explicit config file is set then use that. If one isn't
then we will look for the maven.checkstyle.format property and
load the predefined config set. -->
<j:set var="checkstylePropertiesX" value="${maven.checkstyle.properties}X"/>
<j:choose>
<j:when test="${checkstylePropertiesX != 'X'}">
<j:set
var="checkstyleProperties"
value="${maven.checkstyle.properties}"/>
</j:when>
<j:otherwise>
<j:set
var="checkstyleProperties"
value="${plugin.resources}/${maven.checkstyle.format}_checks.xml"/>
</j:otherwise>
</j:choose>
<ant:taskdef name="checkstyle"
classname="com.puppycrawl.tools.checkstyle.CheckStyleTask">
<ant:classpath>
<ant:pathelement location="${plugin.getDependencyPath('checkstyle:checkstyle')}"/>
<ant:pathelement location="${plugin.getDependencyPath('checkstyle:checkstyle-optional')}"/>
<ant:pathelement location="${plugin.getDependencyPath('antlr:antlr')}"/>
<ant:pathelement location="${plugin.getDependencyPath('regexp:regexp')}"/>
<ant:pathelement location="${plugin.getDependencyPath('commons-beanutils:commons-beanutils')}"/>
<ant:pathelement location="${plugin.getDependencyPath('commons-collections:commons-collections')}"/>
<ant:pathelement location="${plugin.getDependencyPath('commons-logging:commons-logging')}"/>
<ant:path refid="maven.dependency.classpath"/>
<ant:pathelement path="${maven.build.dest}"/>
</ant:classpath>
</ant:taskdef>
</j:if>
</goal>
<!--
========================================================================
Generate a checkstyle report by running checkstyle on the project
source code.
========================================================================
-->
<goal name="checkstyle:report"
description="Perform checkstyle checks"
prereqs="checkstyle:init">
<j:if test="${sourcesPresent == 'true'}">
<j:catch var="exception">
<attainGoal name="checkstyle:run"/>
</j:catch>
<j:if test="${(exception != null)}">
<j:choose>
<j:when test="${exception.indexOf('unable to load header file') != '-1'}">
<ant:echo>
=================================================================
= W A R N I N G =
=================================================================
= Your project doesn't contain a header file specified as: =
= ${maven.checkstyle.header.file}
= Checkstyle needs it to check the existence of the License in =
= your source files. If it can't find this file, it throws an =
= error. =
= A temporary solution is to create an empty LICENSE.txt file. =
= Though, we recommend that you edit this License. =
=================================================================
</ant:echo>
</j:when>
<j:otherwise>
<ant:fail message="${exception}"/>
</j:otherwise>
</j:choose>
</j:if>
</j:if>
</goal>
<goal name="checkstyle:run">
<!-- Create the directory for the checkstyle cache in case it doesn't
exist already -->
<ant:dirname property="maven.checkstyle.cache.dir"
file="${maven.checkstyle.cache.file}"/>
<ant:mkdir dir="${maven.checkstyle.cache.dir}"/>
<ant:echo>Using ${checkstyleProperties} for checkstyle ...</ant:echo>
<ant:checkstyle
config="${checkstyleProperties}"
failOnViolation="${maven.checkstyle.fail.on.violation}">
<property key="checkstyle.header.file"
file="${maven.checkstyle.header.file}"/>
<property key="checkstyle.cache.file"
file="${maven.checkstyle.cache.file}"/>
<ant:fileset dir="${pom.build.sourceDirectory}"
includes="${maven.checkstyle.includes}"
excludes="${maven.checkstyle.excludes}">
<!-- FIXME: This is a bad cut and paste -->
<!-- handle source modifications -->
<j:forEach var="sm" items="${pom.build.sourceModifications}">
<ant:available property="classPresent" classname="${sm.className}"/>
<j:if test="${classPresent != 'true'}">
<j:forEach var="exclude" items="${sm.excludes}">
<ant:exclude name="${exclude}"/>
</j:forEach>
<j:forEach var="include" items="${sm.includes}">
<ant:include name="${include}"/>
</j:forEach>
</j:if>
</j:forEach>
</ant:fileset>
<ant:classpath>
<ant:path refid="maven.dependency.classpath"/>
<ant:pathelement path="${maven.build.dest}"/>
</ant:classpath>
<ant:formatter type="xml"
toFile="${maven.build.dir}/checkstyle-raw-report.xml"/>
<j:choose>
<j:when test="${maven.checkstyle.usefile}">
<ant:formatter type="plain"
toFile="${maven.build.dir}/checkstyle-raw-report.txt"/>
</j:when>
<j:otherwise>
<ant:formatter type="plain"/>
</j:otherwise>
</j:choose>
</ant:checkstyle>
<doc:jsl
input="${maven.build.dir}/checkstyle-raw-report.xml"
output="checkstyle-report.xml"
stylesheet="${plugin.resources}/checkstyle.jsl"
encoding="${maven.docs.outputencoding}"
outputMode="xml"
prettyPrint="true"/>
</goal>
<!--
========================================================================
Register a Checkstyle report to the "site" plugin.
========================================================================
-->
<goal name="maven-checkstyle-plugin:register">
<j:if test="${sourcesPresent == 'true'}">
<doc:registerReport
name="Checkstyle"
pluginName="checkstyle"
link="checkstyle-report"
description="Report on coding style conventions."/>
</j:if>
</goal>
<!--
========================================================================
Deregister a Checkstyle report to the "site" plugin.
========================================================================
-->
<goal name="maven-checkstyle-plugin:deregister">
<j:if test="${sourcesPresent == 'true'}">
<doc:deregisterReport name="Checkstyle"/>
</j:if>
</goal>
</project>