|
- <?xml version="1.0"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <project default="checkstyle" name="CheckAnt" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:if="ant:if" xmlns:unless="ant:unless">
-
- <description>
- Check Ant codebase against certain code style guidelines using
- Checkstyle, Apache Rat, SpotBugs, OWASP Dependency Check, Simian
- and Nu Html Checker (v.Nu).
-
- Checkstyle uses an abstract syntax tree (AST) for doing checks
- against Java sources. It is available at http://checkstyle.sourceforge.net/
- under GPL 2.1 license.
-
- "Apache Rat is a release audit tool, focused on licenses." It is available
- at https://creadur.apache.org/rat/ under Apache License, Version 2.0.
-
- "SpotBugs is a program which uses static analysis to look for bugs in Java
- code." It is available at https://spotbugs.github.io/ under LGPL 3 license.
-
- "Dependency-Check is a utility that identifies project dependencies and
- checks if there are any known, publicly disclosed, vulnerabilities." It is
- available at https://www.owasp.org/index.php/OWASP_Dependency_Check under
- Apache License, Version 2.0.
-
- "Simian (Similarity Analyser) identifies duplication in Java, C#, C, CPP,
- COBOL, Ruby, JSP, ASP, HTML, XML, Visual Basic, Groovy source code and even
- plain text files." It is available at https://www.harukizaemon.com/simian/
- and is for free use in open source projects.
-
- "The Nu Html Checker (v.Nu) is the backend of checker.html5.org,
- html5.validator.nu, and validator.w3.org/nu." It is available at
- https://validator.github.io/validator/ under MIT license.
-
- See external task page and homepages for more information.
- </description>
-
- <import file="build.xml"/>
-
- <property name="checkstyle.src.dir" location="${etc.dir}/checkstyle"/>
-
- <!-- Ant Checkstyle -->
- <property name="checkstyle.version"
- value="6.19"
- description="Which version of Checkstyle to use"/>
- <property name="checkstyle.reportdir"
- location="${build.dir}/reports/checkstyle"
- description="Where to store Checkstyle reports"/>
- <property name="checkstyle.raw"
- location="${checkstyle.reportdir}/raw.xml"
- description="Name of Checkstyle XML report"/>
- <property name="stylesheet.html"
- location="${checkstyle.src.dir}/checkstyle-frames.xsl"
- description="Name of Checkstyle XSLT for generating HTML"/>
- <property name="stylesheet.html.sorted"
- location="${checkstyle.src.dir}/checkstyle-frames-sortby-check.xsl"
- description="Name of Checkstyle XSLT for generating 2nd HTML"/>
- <property name="stylesheet.text"
- location="${checkstyle.src.dir}/checkstyle-text.xsl"
- description="Name of Checkstyle XSLT for generating plain text"/>
- <property name="stylesheet.xdoc"
- location="${checkstyle.src.dir}/checkstyle-xdoc.xsl"
- description="Name of Checkstyle XSLT for generating XDOC"/>
-
- <property name="checkstyle.basedir"
- location="${java.dir}"
- description="Where are the Java sources to check"/>
- <property name="tocheck"
- value="**/*.java"
- description="Include pattern of the files to check"/>
-
- <!-- Findbugs: Running SpotBugs -->
- <property name="spotbugs.version"
- value="3.1.4"
- description="Which version of SpotBugs to use"/>
- <property name="findbugs.reportdir"
- location="${build.dir}/reports/findbugs"
- description="Where to store SpotBugs results"/>
- <property name="findbugs.raw"
- value="raw.xml"
- description="Name of SpotBugs XML report"/>
- <property name="findbugs.xsl"
- value="fancy.xsl"
- description="Which XSL to use for generating output: default, fancy, plain, summary"/>
- <property name="findbugs.jvmargs"
- value="-Xms128m -Xmx512m"
- description="JVM arguments when invoking SpotBugs"/>
-
- <!-- Apache Rat: Release Auditing Tool -->
- <property name="rat.version"
- value="0.12"
- description="Which version of Apache Rat to use"/>
- <property name="rat.report.dir"
- value="${build.dir}/reports/rat"
- description="Where to store Apache Rat reports"/>
- <property name="rat.report.file"
- value="${rat.report.dir}/report.html"
- description="Name of Apache Rat report"/>
-
- <!-- Simian -->
- <property name="simian.version"
- value="2.5.10"
- description="Which version of Simian to use"/>
- <property name="simian.uri"
- value="http://www.harukizaemon.com/simian/simian-${simian.version}.tar.gz"
- description="Where to get Simian"/>
- <property name="simian.lib.dir"
- value="${build.dir}/simian-lib"
- description="Where to store Simian resources"/>
- <property name="simian.report.dir"
- value="${build.dir}/reports/simian"
- description="Where to store Simian reports"/>
-
- <!-- OWASP Dependency Check -->
- <property name="owasp.dc.version"
- value="3.2.1"
- description="Which version of OWASP Dependency Check to use"/>
- <property name="owasp.dc.report.dir"
- value="${build.dir}/reports/owasp-dc"
- description="Where to store the OWASP Dependency Check reports"/>
-
- <!-- Nu Html Checker -->
- <property name="htmlcheck.nu.version"
- value="18.11.5"
- description="Which version of Nu Html Checker to use"/>
- <property name="htmlcheck.report.dir"
- value="${build.dir}/reports/html-check"
- description="Directory where to store the HTML-Check report"/>
- <property name="htmlcheck.report.file"
- value="${htmlcheck.report.dir}/report.txt"
- description="Report file of the HTML-Check"/>
-
-
- <target name="init-ivy">
- <property name="ivy.version" value="2.4.0"/>
- <property name="ivy.jar.url" value="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/>
- <property name="ivy.jar.dir" value="${build.dir}/ivy"/>
- <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>
- <mkdir dir="${ivy.jar.dir}"/>
- <get src="${ivy.jar.url}" dest="${ivy.jar.file}" usetimestamp="true"/>
- <path id="ivy.lib.path">
- <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
- </path>
- <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
- </target>
-
- <target name="checkstyle" description="--> checks Ant codebase according to ${checkstyle.src.dir}/checkstyle-config" depends="init-ivy">
- <available property="antlr.present" classname="antlr.CommonAST"/>
- <echo if:set="antlr.present">
- Found antlr on the classpath.
- Having a wrong antlr version on the same classpath as Checkstyle may produce errors like
- 'Can't find/access AST Node typecom.puppycrawl.tools.checkstyle.api.DetailAST'
- Skip running Checkstyle.
- </echo>
- <sequential unless:set="antlr.present">
- <ivy:cachepath organisation="com.puppycrawl.tools" module="checkstyle" revision="${checkstyle.version}"
- inline="true" conf="default" pathid="checkstyle.classpath"/>
- <taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties" classpathref="checkstyle.classpath"/>
- <mkdir dir="${checkstyle.reportdir}"/>
- <checkstyle config="${checkstyle.src.dir}/checkstyle-config" failOnViolation="false">
- <formatter type="xml" toFile="${checkstyle.raw}"/>
- <fileset dir="${java.dir}">
- <include name="${tocheck}"/>
- <exclude name="**/bzip2/*.java"/>
- <exclude name="**/CVSPass.java"/>
- </fileset>
- </checkstyle>
- </sequential>
- </target>
-
- <target name="htmlreport" description="--> generates a html checkstyle report" unless="antlr.present">
- <xslt in="${checkstyle.raw}" style="${stylesheet.html}"
- out="${checkstyle.reportdir}/html/output.txt">
- <param name="basedir" expression="${checkstyle.basedir}"/>
- <param name="output.dir" expression="${checkstyle.reportdir}"/>
- </xslt>
- <xslt in="${checkstyle.raw}" style="${stylesheet.html.sorted}"
- out="${checkstyle.reportdir}/html/output-sorted.txt">
- <param name="basedir" expression="${checkstyle.basedir}"/>
- <param name="output.dir" expression="${checkstyle.reportdir}"/>
- </xslt>
- </target>
-
- <target name="textreport" description="--> generates a text checkstyle report" unless="antlr.present">
- <xslt in="${checkstyle.raw}" style="${stylesheet.text}"
- out="${checkstyle.reportdir}/report.txt">
- </xslt>
- </target>
-
- <target name="textreport-display" depends="textreport" description="--> generates a text checkstyle report and displays it immediately">
- <loadfile property="report" srcfile="${checkstyle.reportdir}/report.txt"/>
- <echo>${report}</echo>
- </target>
-
- <target name="xdocreport" description="--> generates a xdoc checkstyle report" unless="antlr.present">
- <xslt in="${checkstyle.raw}" style="${stylesheet.xdoc}"
- out="${checkstyle.reportdir}/xdocs/index.xml">
- <param name="basedir" expression="${checkstyle.basedir}"/>
- </xslt>
- </target>
-
- <target name="dumphtml" depends="checkstyle, htmlreport" description="--> runs the checkstyle and generates a html report"/>
- <target name="dumptext" depends="checkstyle, textreport" description="--> runs the checkstyle and displays result as text">
- <concat>
- <filelist dir="${checkstyle.reportdir}" files="report.txt"/>
- </concat>
- </target>
-
- <target name="simiancheck" description="--> runs the check for duplicates">
- <available property="simian.jar.present" file="${simian.lib.dir}/simian-${simian.version}.jar"/>
- <sequential unless:set="simian.jar.present">
- <echo>Install Simian ${simian.version}</echo>
- <mkdir dir="${simian.lib.dir}"/>
- <get src="${simian.uri}" dest="${simian.lib.dir}"/>
- <gunzip src="${simian.lib.dir}/simian-${simian.version}.tar.gz" dest="${simian.lib.dir}/simian-${simian.version}.tar"/>
- <untar src="${simian.lib.dir}/simian-${simian.version}.tar" dest="${simian.lib.dir}">
- <patternset>
- <include name="**/simian*.jar"/>
- <include name="**/simian*.xsl"/>
- </patternset>
- <flattenmapper/>
- </untar>
- </sequential>
-
- <echo>Run Simian</echo>
- <taskdef resource="simiantask.properties">
- <classpath>
- <fileset dir="${simian.lib.dir}" includes="*.jar"/>
- </classpath>
- </taskdef>
- <mkdir dir="${simian.report.dir}"/>
- <simian failureProperty="simian.duplicates.found">
- <fileset dir="${java.dir}"/>
- <formatter type="plain" toFile="${simian.report.dir}/simian-log.txt"/>
- <formatter type="xml" toFile="${simian.report.dir}/simian-log.xml"/>
- </simian>
- <xslt in="${simian.report.dir}/simian-log.xml" style="${simian.lib.dir}/simian.xsl" out="${simian.report.dir}/simian.html"/>
- </target>
-
- <target name="fixTS" description="--> fix checkstyle errors 'Line has trailing spaces'">
- <fail message="Define path to java file 'path'">
- <condition><not><isset property="path"/></not></condition>
- </fail>
- <replaceregexp match="\s+$" replace="" flags="g" byline="true">
- <fileset dir="src/main" includes="${path}"/>
- </replaceregexp>
- </target>
-
- <target name="fixTab" description="--> fix checkstyle errors 'Line contains TAB sign'">
- <fail message="Define path to java file 'path'">
- <condition><not><isset property="path"/></not></condition>
- </fail>
- <fixcrlf srcdir="src/main" includes="${path}" javafiles="yes" tab="remove" tablength="4"/>
- </target>
-
- <target name="findbugs" description="--> checks Ant codebase with SpotBugs" depends="init-ivy,build"
- xmlns:fb="http://findbugs.sourceforge.net/">
- <!-- Path of optional libs is provided through CLI to forked JVM -->
- <path id="optional.libs">
- <fileset dir="lib/optional" includes="*.jar"/>
- </path>
-
- <ivy:cachepath organisation="com.github.spotbugs" module="spotbugs-ant" revision="${spotbugs.version}"
- inline="true" conf="default" pathid="spotbugs.classpath"/>
- <!-- Load the SpotBugs AntTasks -->
- <taskdef uri="http://findbugs.sourceforge.net/" resource="edu/umd/cs/findbugs/anttask/tasks.properties"
- classpathref="spotbugs.classpath"/>
-
- <!-- Start SpotBugs -->
- <mkdir dir="${findbugs.reportdir}"/>
- <fb:spotbugs classpathref="spotbugs.classpath"
- output="xml:withMessages"
- outputFile="${findbugs.reportdir}/${findbugs.raw}"
- jvmargs="${findbugs.jvmargs}"
- projectName="${Name} ${project.version}">
- <class location="${build.classes}"/>
- <sourcePath path="${java.dir}"/>
- <auxClasspath refid="optional.libs"/>
- </fb:spotbugs>
-
- <!-- Generate (human) readable output -->
- <xslt basedir="${findbugs.reportdir}" includes="${findbugs.raw}" destdir="${findbugs.reportdir}">
- <style>
- <javaresource name="${findbugs.xsl}" classpathref="spotbugs.classpath"/>
- </style>
- </xslt>
- </target>
-
- <target name="rat" description="--> Runs the ReleaseAuditingTool" depends="init-ivy">
- <ivy:cachepath organisation="org.apache.rat" module="apache-rat-tasks" revision="${rat.version}"
- inline="true" conf="default" pathid="rat.classpath"/>
- <typedef resource="org/apache/rat/anttasks/antlib.xml"
- uri="antlib:org.apache.rat.anttasks"
- classpathref="rat.classpath"/>
- <mkdir dir="${rat.report.dir}"/>
- <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" reportfile="${rat.report.dir}/report.txt">
- <fileset dir="${java.dir}">
- <exclude name="org/apache/tools/ant/defaultManifest.mf"/>
- <exclude name="org/apache/tools/ant/version.txt"/>
- </fileset>
- </rat:report>
- </target>
-
- <target name="dependency-check" description="--> Runs the OWASP Dependency Check" depends="init-ivy">
- <ivy:cachepath organisation="org.owasp" module="dependency-check-ant" revision="${owasp.dc.version}"
- inline="true" conf="default" pathid="owasp.dc.classpath"/>
- <taskdef resource="dependency-check-taskdefs.properties" uri="https://jeremylong.github.io/"
- classpathref="owasp.dc.classpath"/>
- <mkdir dir="${owasp.dc.report.dir}"/>
- <owasp:dependency-check xmlns:owasp="https://jeremylong.github.io/"
- projectName="${ant.project.name}"
- reportOutputDirectory="${owasp.dc.report.dir}">
- <fileset dir="lib" includes="**/*.jar"/>
- <fileset dir="." includes="dist/**/*.jar"/>
- </owasp:dependency-check>
- </target>
-
- <target name="html-check" description="--> Runs the Nu Html Checker" depends="init-ivy">
- <ivy:cachepath organisation="nu.validator" module="validator" revision="${htmlcheck.nu.version}"
- inline="true" conf="default" pathid="nu.classpath"/>
- <fileset dir="." id="html.files">
- <include name="${src.dir}/**/*.html"/>
- <include name="${manual.dir}/**/*.html"/>
- <exclude name="${manual.dir}/index.html"/>
- </fileset>
- <pathconvert pathsep=" " property="html.list" refid="html.files"/>
- <mkdir dir="${htmlcheck.report.dir}"/>
- <java classname="nu.validator.client.SimpleCommandLineValidator" classpathref="nu.classpath"
- taskname="html-check" output="${htmlcheck.report.file}">
- <arg line="--html --format text"/>
- <arg line="${html.list}"/>
- </java>
- <concat><file name="${htmlcheck.report.file}"/></concat>
- </target>
- </project>
|