In the build magic system users are able to insert targets very easily. This allows jars to be created at many different times.
A real world use case from the build magic system is to build all modules. Once this is completed then build a jar, jboss-all-client.jar which contains a collection of client jars.
<!--Create a jbossall-client.jar containing everything a client app needs-->
<mkdir dir="build"/>
<delete file="${install.client}/jbossall-client.jar"/>
<unjar dest="build">
<fileset dir="${install.client}">
<include name="*-client.jar"/>
<include name="concurrent.jar"/>
<include name="jboss-j2ee.jar"/>
<include name="jboss-j2se.jar"/>
<include name="jboss-jaxrpc.jar"/>
<include name="jboss-saaj.jar"/>
<include name="jbossmqha.jar"/>
<include name="jmx-connector-client-factory.jar"/>
<include name="namespace.jar"/>
<include name="jboss-deployment.jar"/>
<include name="wsdl4j.jar"/>
<include name="jboss-remoting.jar"/>
<include name="ejb3-persistence.jar"/>
<include name="jboss-ejb3x.jar"/>
<include name="jboss-annotations-ejb3.jar"/>
<include name="hibernate-annotations.jar"/>
<!-- excludes -->
<exclude name="jboss-ws4ee-client.jar"/>
<exclude name="jbossws-client.jar"/>
</fileset>
</unjar>
<jar destfile="${install.client}/jbossall-client.jar" basedir="build" />
<delete dir="build" />
</target>
In the JBossBuild system we do not have this luxury as all jar generation takes place within the context of a component. In order to replicate this functionality you could simply place the creation of this jar into a component that is built late in the build process, however this just masks the underlying issue, that actions cannot be declared outside the scope of a component. Is this an issue? I welcome thoughts.