Search code examples
eclipsepropertieseclipse-plugineclipse-pde

How can I use properties taken from a file in the code of an eclipse PDE fragment/plugin project?


I have created an eclipse plugin project and a corresponding fragment project which I use for junit tests.

In the fragment I specify the plugin project as the "Host plugin". Further I specify the following on the build.properties pane:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               my.properties

where my.properties is a file located at the root of the fragment project. I have then written a test where I try to load the my.properties file like this:

Properties properties = new Properties();
InputStream istream = this.getClass().getClassLoader()
    .getResourceAsStream("my.properties");

try {
  properties.load(istream);
} catch (IOException e) {
  e.printStackTrace();
}

but istream is null and the test fails with a NullPointerException when calling load in the try block.

I have tried to do the same thing in the host plugin and there it works fine. Any ideas about why I can't read resouces in my PDE fragment when using Junit?


Solution

  • Try using Bundle#getEntry. If your plug-in has an Activator, you get a BundleContext object when your plugin is started (use Bundle-ActivationPolicy: lazy in your manifest). You can get the Bundle object from the BundleContext:

    public class Activator implements BundleActivator {
       private static Bundle bundle;
    
       public static Bundle getBundle() {
          return myBundle;
       }
       public void start(BundleContext context) throws Exception {
          bundle = context.getBundle();
       }
    }
    
    ...
    URL url = Activator.getBundle().getEntry("my.properties");
    InputStream stream = url.openStream();
    properties.load(stream);