The Ant build script can be improved in a number of ways:
the overwrite property should not be defined twice (with different values)
the parent-plugin recursion does not need a separate macro
do not rebuild a plugin when it was already build in the same Ant invocation
add an option to skip a plugin from being built
https://github.com/igniterealtime/Openfire/pull/599 introduces the related changes.
A plugin can be skipped by setting a property plugin.pluginname.skip to true (for example: ‑Dplugin.broadcast.skip=true). This property is also set internally, after each plugin is build, to prevent rebuilds of the same plugin (which can occur in parent/child plugin setups).