blob: 2c17a4ab97a7d8f5417249c2f405a9709ce732b5 [file] [log] [blame]
<!-- This file is an ANT build script. ANT is a Java based build tool. -->
<!-- It is availale from http://ant.apache.org -->
<!-- ================================================================= -->
<!-- NOTE: all directories are relative to logging-log4j/tests -->
<!-- ================================================================= -->
<project name="log4j-tests" default="usage" basedir="." >
<property file="build.properties"/>
<!-- The base directory relative to which most targets are built -->
<property name="base" value="."/>
<!-- The directory where source files are stored. -->
<property name="project.source.home" value="../src/java/"/>
<property name="project.classes.home" value="../classes/"/>
<property name="tests.source.home" value="./src/java/"/>
<!-- The stem where most log4j source code is located. -->
<property name="stem" value="org/apache/log4j"/>
<!-- Destination for compiled files -->
<property name="javac.dest" value="./classes"/>
<path id="tests.classpath">
<pathelement location="${project.source.home}"/>
<pathelement location="${project.classes.home}"/>
<pathelement location="${tests.source.home}"/>
<pathelement location="${javac.dest}"/>
<pathelement location="./resources"/>
<pathelement location="${jakarta-oro.jar}"/>
<fileset dir="./lib/">
<include name="*.jar"/>
</fileset>
</path>
<!-- ================================================================= -->
<!-- TARGETS -->
<!-- ================================================================= -->
<!-- ================================================================= -->
<!-- Default target -->
<!-- ================================================================= -->
<target name="usage">
<echo>
These are the targets supported by this ANT build scpript:
build - compile all project files, if a certain library is missing,
then the compilation of its dependents are skipped.
regression - Run regression tests which check large parts of log4j.
runAll - run all available tests
coverageReport - Runs all tests and generates coverage report.
</echo>
</target>
<target name="prepare">
<mkdir dir="${javac.dest}" />
<mkdir dir="./output" />
<delete file="classes/log4j.xml"/>
<delete file="classes/log4j.properties"/>
</target>
<!-- ================================================================= -->
<!-- Check if prerequisites are available -->
<!-- ================================================================= -->
<target name="check" depends="junitCheck, oroCheck">
</target>
<target name="oroCheck" >
<available classname="org.apache.oro.text.perl.Perl5Util" property="oro-present">
<classpath refid="tests.classpath"/>
</available>
<fail unless="oro-present">
Please make sure to that jakarta-oro.jar is available. You can either
place it in the ./tests/lib/ directory or alternatively set the
"jakarta-oro.jar" property to point to it.
</fail>
</target>
<target name="junitCheck" >
<available classname="junit.framework.Test" property="junit-present">
<classpath refid="tests.classpath"/>
</available>
<fail unless="junit-present">
Could not find junit classes. Is the file junit.jar missing?
See the documentation for the junit task in the Apache Ant Manual.
</fail>
</target>
<!-- Clean the parent project -->
<!-- ================================================================= -->
<target name="parentClean">
<ant dir=".." target="clean" inheritRefs="true"/>
</target>
<!-- ================================================================= -->
<!-- Build the parent project -->
<!-- ================================================================= -->
<target name="parentBuild">
<ant dir=".." target="build.core" inheritRefs="true"/>
<ant dir=".." target="build.servletAPI" inheritRefs="true"/>
</target>
<!-- ================================================================= -->
<!-- Compile test cases and related source files. -->
<!-- ================================================================= -->
<target name="build" depends="parentBuild, prepare">
<!-- default value unless overriden in with.clover task -->
<property name="haltonfailure" value="yes"/>
<javac srcdir="${tests.source.home}"
destdir="${javac.dest}"
excludes="${stem}/chainsaw/receivers/*.java,
${stem}/selector/PassByJNDI.java,
${stem}/ugli/**.java,
${stem}/db/**.java"
deprecation="${deprecation}"
debug="on">
<classpath refid="tests.classpath"/>
</javac>
</target>
<!-- ================================================================= -->
<!-- Remove all generated files such as compiled class files and test -->
<!-- case output. -->
<!-- ================================================================= -->
<target name="clean">
<delete dir="${javac.dest}/" />
<delete dir="./output/" />
<delete dir="./coverage/"/>
<delete>
<fileset dir="." includes="log4j.db*"/>
</delete>
<delete dir="${javac.dest}/log4j.xml" />
</target>
<target name="cleanOutputDir">
<delete>
<fileset dir="./output/" includes="**"/>
</delete>
</target>
<!-- ================================================================= -->
<!-- Run all tests -->
<!-- ================================================================= -->
<target name="runAll" depends="regression, longUnit"/>
<!-- ================================================================= -->
<!-- Tests multiple parts of log4j. These tests are much more fragile -->
<!-- unit tests. Regression tests compare output with a previously -->
<!-- created witness file. -->
<!-- ================================================================= -->
<target name="regression" depends="Minimum, Logger, DOM, CustomLevel,
CustomLogger, PatternLayout,
HierarchyThreshold, DefaultInit,
SocketServer,
XMLLayout,
AsyncAppender,
OptionSubstitutionTest,
LevelOptionConverterTest,
BoundedFIFO,
Joran,
SimpleFilter,
Scheduler,
ThrowableInformation,
LocationInfo,
CyclicBuffer,
OR,
VariaLevelMatchFilter,
VariaLevelRangeFilter, PatternParser,
LevelMatchFilter, DRFA,
Rolling,
NDC,
Plugins,
CachedDateFormat,
ReaderWriterLock,
Schema
"/>
<!-- ================================================================= -->
<!-- Longer unit tests -->
<!-- ================================================================= -->
<target name="longUnit" depends=""/>
<!-- ================================================================= -->
<!-- Rolling unit tests -->
<!-- ================================================================= -->
<target name="Rolling" depends="Compress,
SizeBasedRolling,
TimeBasedRolling, Renaming"/>
<!-- ================================================================= -->
<!-- Joran unit tests -->
<!-- ================================================================= -->
<target name="Joran" depends="Pattern,
SimpleStore,
Interpreter,
SkipInInterpreter,
JoranConfigurator"/>
<!-- ================================================================= -->
<!-- ============== Regression and Unit Tests follow ================= -->
<!-- ================================================================= -->
<target name="Minimum" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.MinimumTest" />
</junit>
</target>
<target name="Logger" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.LoggerTestCase" />
</junit>
</target>
<target name="PatternLayout" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="${haltonfailure}">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.PatternLayoutTest" />
</junit>
</target>
<target name="HierarchyThreshold" depends="check, build, cleanOutputDir">
<delete file="output/temp"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.HierarchyThresholdTestCase" />
</junit>
</target>
<target name="DOM" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<jvmarg value="-Dlog4j.debug=TRUE"/>
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.xml.DOMTestCase" />
</junit>
</target>
<target name="NDC" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.NDCTestCase" />
</junit>
</target>
<target name="CustomLevel" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.xml.CustomLevelTestCase" />
</junit>
</target>
<target name="CustomLogger" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.customLogger.XLoggerTestCase" />
</junit>
</target>
<target name="DefaultInit" depends="check, build, cleanOutputDir">
<!-- Delete possible cruft from previous runs. -->
<delete file="classes/log4j.xml"/>
<delete file="classes/log4j.properties"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test fork="true" name="org.apache.log4j.defaultInit.TestCase1" />
</junit>
<copy file="input/xml/defaultInit.xml" tofile="classes/log4j.xml"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test fork="true" name="org.apache.log4j.defaultInit.TestCase2" />
</junit>
<delete file="classes/log4j.xml"/>
<!-- test handling of log4j.defaultInitOverride system property -->
<!-- log4j.defaultInitOverride system property NO LONGER SUPPORTED
<copy file="input/xml/defaultInit.xml" tofile="classes/log4j.xml"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<jvmarg value="-Dlog4j.defaultInitOverride=true" />
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test fork="true" name="org.apache.log4j.defaultInit.TestCase1" />
</junit>
<delete file="classes/log4j.xml"/>
-->
<!-- test default initialization from log4j.xml -->
<copy file="input/defaultInit3.properties" tofile="classes/log4j.properties"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test fork="true" name="org.apache.log4j.defaultInit.TestCase3" />
</junit>
<delete file="classes/log4j.properties"/>
<!-- test default initialization from log4j.properties -->
<copy file="input/xml/defaultInit.xml" tofile="classes/log4j.xml"/>
<copy file="input/defaultInit3.properties" tofile="classes/log4j.properties"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test fork="true" name="org.apache.log4j.defaultInit.TestCase4" />
</junit>
<delete file="classes/log4j.xml"/>
<delete file="classes/log4j.properties"/>
</target>
<target name="SocketServer" depends="check, build, cleanOutputDir">
<parallel>
<java classname="org.apache.log4j.net.ShortSocketServer" fork="yes">
<arg value="8"/>
<arg value="input/net/socketServer"/>
<classpath refid="tests.classpath"/>
</java>
<sequential>
<sleep seconds="2"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.net.SocketServerTestCase" />
</junit>
</sequential>
</parallel>
</target>
<target name="XMLLayout" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.xml.XMLLayoutTestCase" />
</junit>
</target>
<target name="AsyncAppender" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.AsyncAppenderTestCase" />
</junit>
</target>
<target name="VariaLevelMatchFilter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.varia.LevelMatchFilterTestCase" />
</junit>
</target>
<target name="VariaLevelRangeFilter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.varia.LevelRangeFilterTestCase" />
</junit>
</target>
<target name="FiltersLevelMatchFilter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.filter.LevelMatchFilterTestCase" />
</junit>
</target>
<target name="LevelMatchFilter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.varia.LevelMatchFilterTestCase" />
</junit>
</target>
<target name="SimpleFilter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.filter.SimpleFilterTest" />
</junit>
</target>
<target name="ErrorHandler" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.varia.ErrorHandlerTestCase" />
</junit>
</target>
<target name="OptionSubstitutionTest" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.helpers.OptionSubstitutionTest" />
</junit>
</target>
<target name="LevelOptionConverterTest" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.helpers.LevelOptionConverterTest" />
</junit>
</target>
<target name="BoundedFIFO" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.helpers.BoundedFIFOTestCase" />
</junit>
</target>
<target name="CyclicBuffer" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.helpers.CyclicBufferTestCase" />
</junit>
</target>
<target name="PatternParser" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.pattern.PatternParserTest" />
</junit>
</target>
<target name="OR" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.or.ORTestCase" />
</junit>
</target>
<target name="DRFA" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.DRFATestCase" />
</junit>
</target>
<target name="Plugins" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.plugins.PluginTestCase" />
</junit>
</target>
<target name="FileNamePattern" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.rolling.helper.FileNamePatternTestCase" />
</junit>
</target>
<target name="SizeBasedRolling" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.rolling.SizeBasedRollingTest" />
</junit>
</target>
<target name="TimeBasedRolling" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.rolling.TimeBasedRollingTest" />
</junit>
</target>
<target name="MultiplexAppenderTest" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.multiplex.MultiplexAppenderTest" />
</junit>
</target>
<target name="Compress" depends="check, build, cleanOutputDir">
<!-- The input files are erased as a result of compression. We -->
<!-- need to "create" them afresh for each test. -->
<copy file="input/compress1.copy" toFile="input/compress1.txt"/>
<copy file="input/compress2.copy" toFile="input/compress2.txt"/>
<copy file="input/compress3.copy" toFile="input/compress3.txt"/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.rolling.helper.CompressTestCase" />
</junit>
</target>
<!-- Start Renaming test and FileOpener near simultaneously. Have FileOpener
keep the file test.log open. This tests the ability of RollingFileAppender
to deal with renaming of files opened by other processes.
-->
<target name="Renaming" depends="check, build, cleanOutputDir">
<parallel>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.rolling.RenamingTest" />
</junit>
<sequential>
<sleep seconds="1"/>
<java classname="org.apache.log4j.rolling.FileOpener" fork="yes">
<classpath refid="tests.classpath"/>
</java>
</sequential>
</parallel>
</target>
<target name="Pattern" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.joran.PatternTest" />
</junit>
</target>
<target name="SimpleStore" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.joran.SimpleStoreTest" />
</junit>
</target>
<target name="Interpreter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.joran.InterpreterTest" />
</junit>
</target>
<target name="SkipInInterpreter" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.joran.SkippingInInterpreterTest" />
</junit>
</target>
<target name="JoranConfigurator" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.joran.JoranConfiguratorTest" />
</junit>
</target>
<target name="Scheduler" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false" />
<test name="org.apache.log4j.scheduler.SchedulerTest" />
</junit>
</target>
<target name="ThrowableInformation" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.spi.ThrowableInformationTest" />
</junit>
</target>
<target name="LocationInfo" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.spi.location.LocationInfoTest" />
</junit>
</target>
<target name="CachedDateFormat" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.pattern.CachedDateFormatTest" />
</junit>
</target>
<target name="Schema" depends="check, build">
<available classname="org.apache.xerces.jaxp.SAXParserFactoryImpl" property="xerces-available"/>
<fail unless="xerces-available" message="Schema tests require Xerces-J 2.x on class path."/>
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath>
<pathelement path="${javac.dest}"/>
<pathelement path="${java.class.path}"/>
</classpath>
<jvmarg value="-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.xml.SchemaTestCase" />
</junit>
</target>
<!-- ================================================================= -->
<!-- ========================= long Tests ========================= -->
<!-- ================================================================= -->
<target name="ReaderWriterLock" depends="check, build, cleanOutputDir">
<junit printsummary="yes" fork="no" haltonfailure="yes">
<sysproperty key="runLen" value="100"/>
<classpath refid="tests.classpath"/>
<formatter type="plain" usefile="false"/>
<test name="org.apache.log4j.helpers.ReaderWriterLockTestCase" />
</junit>
</target>
<!-- ============================================================= -->
<!-- DB tests -->
<!-- ============================================================= -->
<target name="mysql" depends="build" description="MySQL tests" >
<ant antfile="db.xml" target="mysql"/>
</target>
<target name="postgresql" depends="build" description="MySQL tests" >
<ant antfile="db.xml" target="postgresql"/>
</target>
<target name="hsqldb" depends="build" description="HSQLDB tests" >
<ant antfile="db.xml" target="hsqldb"/>
</target>
<target name="oracle" depends="build" description="Oracle tests" >
<ant antfile="db.xml" target="oracle"/>
</target>
<target name="msSql" depends="build" description="MsSQL tests" >
<ant antfile="db.xml" target="msSql"/>
</target>
<!-- ============================================================= -->
<!-- Coverage analysis -->
<!-- ============================================================= -->
<target name="with.clover">
<!-- some tests fail when running clover
setting this property will cause testing to continue -->
<property name="haltonfailure" value="no"/>
<available resource="clovertasks" property="clover-present"/>
<fail unless="clover-present">
clover.jar must be in the classpath and should alos be
placed in the lib directory. A version of clover
(http://www.cenqua.com/clover) for use with ASF projects
is available from the committers/donated-licenses/clover module
in the SVN repository.
</fail>
<taskdef resource="clovertasks"/>
<clover-setup initString="log4j.db"/>
</target>
<target name="coverageReport" depends="parentClean, clean, with.clover, runAll">
<mkdir dir="coverage"/>
<taskdef resource="clovertasks"/>
<clover-report>
<current title="log4j coverage" outfile="coverage">
<format type="html"/>
</current>
</clover-report>
</target>
</project>