Dependency Finder defines a number of tasks for use with the
Ant build tool from the
Apache Foundation. You need
to tell Ant where to find the classes that implement these tasks and their
support classes. The tasks need the following elements on the
CLASSPATH
from the Dependency Finder distribution:
<DEPENDENCYFINDER_HOME>/classes
<DEPENDENCYFINDER_HOME>/lib/DependencyFinder.jar
<DEPENDENCYFINDER_HOME>/lib/jakarta-oro.jar
<DEPENDENCYFINDER_HOME>/lib/log4j.jar
<DEPENDENCYFINDER_HOME>/lib/saxon-he.jar
It is better if you put classes
first. This way, patch files
that come as loose classes will take precedence over the older definitions in
DependencyFinder.jar
.
One easy to do this is to define a global <path>
tag as
part of the Ant project.
<!-- Replace "value" with your installation's directory --> <property name="dependencyfinder.home" value="C:/DependencyFinder"/> <path id="dependencyfinder"> <pathelement location="${dependencyfinder.home}/classes"/> <pathelement location="${dependencyfinder.home}/lib/DependencyFinder.jar"/> <pathelement location="${dependencyfinder.home}/lib/jakarta-oro.jar"/> <pathelement location="${dependencyfinder.home}/lib/log4j.jar"/> <pathelement location="${dependencyfinder.home}/lib/saxon-he.jar"/> </path>
Some people might want to add these JAR files directly to their Ant
installation. This way, they do not have to deal with the
CLASSPATH
and extra property. I don't recommend you do this
because it makes upgrading Ant that much more difficult. Every time, you must
remember to copy the files again. Also, you cannot deal with the
classes
directory in the same fashion and this could mean missing
out on Dependency Finder patches.
Whatever you do, make sure that Ant can find log4j.properties
to initialize Log4J properly. If you don't, the default Log4J configuration
will log everything to a dummy appender and the tasks will take much longer to
execute.
Once Ant knows where to find the Dependency Finder classes, you can use the path-like structures to import the predefined tasks supplied by Dependency Finder.
<taskdef resource="dependencyfindertasks.properties"> <classpath refid="dependencyfinder"/> </taskdef>
The resource file DependencyFinderTasks.properties
is already
part of DependencyFinder.jar
. It looks like the following:
classmetrics=com.jeantessier.dependencyfinder.ant.ClassMetrics dependencyextractor=com.jeantessier.dependencyfinder.ant.DependencyExtractor dependencyreporter=com.jeantessier.dependencyfinder.ant.DependencyReporter dependencyclosure=com.jeantessier.dependencyfinder.ant.DependencyClosure dependencymetrics=com.jeantessier.dependencyfinder.ant.DependencyMetrics listdeprecatedelements=com.jeantessier.dependencyfinder.ant.ListDeprecatedElements oometrics=com.jeantessier.dependencyfinder.ant.OOMetrics jarjardiff=com.jeantessier.dependencyfinder.ant.JarJarDiff listdiff=com.jeantessier.dependencyfinder.ant.ListDiff
If you don't like the tasks' predefined names, you can define your own with
Ant's <taskdef>
task.
<taskdef name="metrics.class" classname="com.jeantessier.dependencyfinder.ant.ClassMetrics"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="extractor" classname="com.jeantessier.dependencyfinder.ant.DependencyExtractor"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="reporter" classname="com.jeantessier.dependencyfinder.ant.DependencyReporter"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="closure" classname="com.jeantessier.dependencyfinder.ant.DependencyClosure"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="metrics.dependency" classname="com.jeantessier.dependencyfinder.ant.DependencyMetrics"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="list.deprecated.elements" classname="com.jeantessier.dependencyfinder.ant.ListDeprecatedElements"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="metrics.oo" classname="com.jeantessier.dependencyfinder.ant.OOMetrics"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="diff" classname="com.jeantessier.dependencyfinder.ant.JarJarDiff"> <classpath refid="dependencyfinder"/> </taskdef> <taskdef name="list.diff" classname="com.jeantessier.dependencyfinder.ant.ListDiff"> <classpath refid="dependencyfinder"/> </taskdef>
Or use your own properties file. For example, given the following
mytasks.properties
file:
metrics.class=com.jeantessier.dependencyfinder.ant.ClassMetrics extractor=com.jeantessier.dependencyfinder.ant.DependencyExtractor reporter=com.jeantessier.dependencyfinder.ant.DependencyReporter closure=com.jeantessier.dependencyfinder.ant.DependencyClosure metrics.dependency=com.jeantessier.dependencyfinder.ant.DependencyMetrics list.deprecated.elements=com.jeantessier.dependencyfinder.ant.ListDeprecatedElements metrics.oo=com.jeantessier.dependencyfinder.ant.OOMetrics diff=com.jeantessier.dependencyfinder.ant.JarJarDiff list.diff=com.jeantessier.dependencyfinder.ant.ListDiff
Which you can use in your buildfile:
<taskdef file="mytasks.properties"/>
Copyright © 2001-2023 Jean Tessier. All rights reserved.