Немного более элегантное решение, если вы не против связать себя с Феликсом.
package org.eclipse.core.runtime;
import java.net.URL;
import org.apache.felix.framework.BundleRevisionImpl;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
public class FileLocator {
private FileLocator() {}
public static URL resolve(URL url) {
if(url == null) {
return null;
}
Bundle bundle = FrameworkUtil.getBundle(FileLocator.class).getBundleContext().getBundle();
BundleRevisionImpl bundleRevision = bundle.adapt(BundleRevisionImpl.class);
return bundleRevision.getLocalURL(url.getPort(), url.getPath());
}
}
Для этого необходимо экспортировать среду при запуске Felix со следующим параметром:
-Dorg.osgi.framework.system.packages.extra=org.apache.felix.framework