I am trying to load a class whose name is specified in a properties file. Here is the code for the same.
try {
Properties properties = new Properties();
InputStream in = MyAbstractFactory.class.getResourceAsStream("/some.properties");
properties.load(in);
String impl = properties.getProperty("key");
MyAbstractFactory factories = (MyAbstractFactory) Class.forName( impl ).newInstance();
return factories;
} catch (Exception e) {
return new DefaultFactoriesImpl();
}
This code is part of a jar file. the properties file is just outside the jar. Its unable to load the properties file and is loading DefaultFactoriesImpl instead. I know this happens when MyAbstractFactory.class.getResourceAsStream cant find the resource in the class path but that doesn’t seem to be the case here.
Dir Structure:-
- com
- myjar.jar
- some.properties
Command i am executing is “java -jar myjar.jar”
Any feedback on why this might be happening. Could this have something to do with Clasloaders? I’d like to add that when i run this code from within eclipse it seems pick up some.properties just fine.
Remove the leading slash from the argument you pass to
getResourceAsStream().Put the folder outside the JAR into the CLASSPATH when you execute the JAR. I don’t know if the manifest CLASSPATH overrides the one you might pass using -cp. Play with it; one of them will work.
It’s not finding your .properties file because it’s not in the JVM CLASSPATH. When you do it properly, the JVM will find it.