To avoid library version conflicts at component level we must have a minimum number of libraries in the system classloader. When a class was loaded by the system classloader all inherithed classloaders can't load another version of the class even if provided by the component classloader. So, if a component requires another version of slf4j-api or slf4j-jdk14, that will not work. In the past, we have already have this library version conflict problem.
The space saved is not a problem. Petals ESB does not consume a lot of memory.
In the system class loader, just put librairies required by petals bootstrap. If a container library requires another library that is not in the system classloader, put it in the container class loader, even if this library can be used by components. Same for JBI components.
It would maybe make sense, instead of tweaking the launcher classloader, to tweak the components classloader so that its parent is not the system classloader but its parent (the extension classloader, or even maybe the bootstrap classloader).
This would allow to remove complex classloader code from petals launcher and to be sure the component classloader never get unwanted dependencies.