This tutorial introduces the use of external modules as a reliable method of declaring dependencies. In this example we are replacing the somewhere error-prone manual declaration of test-scope dependnecies with a single resource reference defined in an external module.
The first update to our index file is the addition of a module import statement. The import statement is directing Depot to load a module defintion for the Ant system which contains information about Ant resources and their respective dependencies. The second change is the replacement of the manual uri-based dependency includes with a single resource reference to org/apache/ant/ant-junit. When Depot resolves the transitive dependencies it will take into account the dependencies declared by the ant/ant-junit resource resulting in a reliable and complete dependency set. We have also include the dpml module in the includes directive (mainly because the Transit core package includes a better log formatter than the default provided in the JDK).
<?xml version="1.0" encoding="ISO-8859-1"?>
<index xmlns="dpml:library">
<imports>
<import uri="link:module:ant"/>
<import uri="link:module:dpml"/>
</imports>
<project name="demo" basedir=".">
<properties>
<property name="location" value="New York"/>
<property name="message" value="Hello from ${user.name} in ${location}"/>
</properties>
<types>
<type id="jar" alias="true"/>
</types>
<dependencies>
<test>
<include ref="org/apache/ant/ant-junit"/>
<include ref="dpml/transit/dpml-transit-main"/>
</test>
</dependencies>
<filters>
<filter token="MESSAGE" value="${message}"/>
</filters>
<dependencies>
</project>
</index>
The following command request a listing of our sample projects dependencies. The -expand commandline option is telling Depot that we want to see the fully expanded dependencies (i.e. the dependnecies that will end up in the test classloader).
$ cd tutorials\tooling\import
$ build -list -expand
Listing project: demo
project:demo#SNAPSHOT
version: SNAPSHOT
basedir: D:\dpml\tutorials\tooling\import
types: (1)
jar
test providers: (6)
resource:org/apache/ant/ant-launcher#1.6.5
resource:org/apache/ant/ant-trax#1.6.5
resource:org/apache/ant/ant-xslp#1.6.5
resource:org/apache/ant/ant#1.6.5
resource:junit/junit#3.8.1
resource:org/apache/ant/ant-junit#1.6.5
resource:dpml/transit/dpml-transit-main#SNAPSHOT
This tutorial has presented the benefits arising from the usage of modules - and in-effect, leveraging dependency information from external projects.