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.jarIt 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 log4j2.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-2024 Jean Tessier. All rights reserved.