The objective of this tutorial is to introduce the concept of a module and the usage of modules in managing namespaces for produced artifacts. In general terms a module can be viewed as a named group. Modules can contain projects, resources and other modules. As such - modules enable the creation of a namespace heirachy that maps directly to the notion of a group in the artifact protocol. For example - the uri artifact:part:dpml/metro/dpml-metro-runtime#1.0.0 is referencing a resource named dpml-metro-runtime in the dpml/metro module.
The following index file introduces an enclosing module to our earlier multi-project build example. In this case we are using the module declaration to partition the two projects in the namespace org/acme.
<?xml version="1.0" encoding="ISO-8859-1"?> <index xmlns="dpml:library"> <imports> <import uri="link:module:org/apache/ant"/> <import uri="link:module:dpml"/> </imports> <module name="org/acme" basedir="."> <project name="clock-api" basedir="api"> <types> <type id="jar"/> </types> </project> <project name="clock-impl" basedir="impl"> <types> <type id="jar"/> </types> <dependencies> <runtime> <include key="clock-api"/> </runtime> <test> <include ref="org/apache/ant/ant-junit"/> <include ref="dpml/transit/dpml-transit-main"/> </test> </dependencies> </project> </module> </index>
The following command lists the projects relative to the module tutorial source project. The output validates that the resources names used within Depot now include the org/acme namespace.
$ cd tutorials\tooling\complex\modules $ build -list Selection: [3] [1] project:org/acme/clock-api#SNAPSHOT [2] project:org/acme/clock-impl#SNAPSHOT [3] module:org/acme/#SNAPSHOT $
Something important to note is that the above listing includes our two projects clock-api and clock-impl together with the enclosing module. In effect a module that declares a basedir is considered as a buildable project. Sometimes it is convinient to handle application level packaging and installer creation concerns at the level of a module build, but more interesting is the potential for exporting a module definition for use by third-parties. Our next tutorial presents an example of the creation of a module artifact suitable for use by third-party projects that want to reference our content.