It is arguably desirable to write plugins (and other third-party add-ons) outside of the DSpace source tree, somewhat independently of the current source, and drop them into an instance of DSpace without rebuilding DSpace. Problems arise when one does subsequently rebuild DSpace, because 'ant update' will rename [DSpace]/lib and [DSpace]/webapps and provide new ones, pushing one's third-party code out of the class path. At this point one must drop the third-party code in again.
If there were a directory within [DSpace] which is not clobbered by updates and is on the class path, then the problem would not occur. Perhaps the simplest way to accomplish this, given the nature of the Servlet environment, is to provide for additional class path elements when dynamically loading things like plugins. A fairly simple custom class loader can search configured paths when the standard class loader fails to find the requested class.