After http://hg.netbeans.org/core-main/rev/6a05c30c5d0b, I can translate a NetBeans module suite to OSGi bundles and load them including branding/localization using fragment bundles. For example, with NetBeans' "FeedReader" demo app, org.netbeans.core.startup-*.jar contains a manifest
and a resource org/netbeans/core/startup/splash.gif, whereas core_feedreader.jar contains a manifest
and a resource org/netbeans/core/startup/splash_feedreader.gif providing branding (akin to localization). At runtime, Bundle.getResource("org/netbeans/core/startup/splash_feedreader.gif") is called before Bundle.getResource("org/netbeans/core/startup/splash.gif") to permit the branding override.
This all works fine when I create a directory of bundles and launch Felix using -b on that directory, an empty cache dir, and felix.auto.deploy.action=uninstall,install,update,start.
But when I launch Felix again using the same cache dir (without first deleting its contents), none of the resources from the fragment bundles seem to be available. If I delete the bundle* subdirs of the cache dir - even just the subdirs corresponding to the fragments - before starting Felix then it works, so the problem is really with the bundle cache (as opposed to some problem with the application's own settings).
Debug printlns show the fragment bundle in state RESOLVED on the first start, INSTALLED thereafter.
Appending ";fragment-attachment=resolve-time" to the Bundle-SymbolicName of all (non-fragment) bundles in the directory does not have any effect.
AutoProcessor handling AUTO_DEPLOY_START_VALUE skips fragment bundles, since start() would be illegal on them. But why aren't they resolved as a consequence of their hosts being resolved and started?