我正在尝试加载一个名称在属性文件中指定的类。这是相同的代码。
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();
}
此代码是jar文件的一部分。属性文件就在jar之外。它无法加载属性文件,而是加载DefaultFactoriesImpl。我知道当MyAbstractFactory.class.getResourceAsStream无法在类路径中找到资源时会发生这种情况,但这似乎不是这种情况。
目录结构: -
我正在执行的命令是“java -jar myjar.jar”
有关为何可能发生这种情况的任何反馈。这可能与Clasloaders有关吗?我想补充一点,当我从eclipse中运行这段代码时,似乎可以选择some.properties。
答案 0 :(得分:0)
从传递给getResourceAsStream()
的参数中删除前导斜杠。
执行JAR时,将JAR外部的文件夹放入CLASSPATH。我不知道清单CLASSPATH是否会覆盖您可能使用-cp传递的清单。玩它;其中一个会奏效。
找不到你的.properties文件,因为它不在JVM CLASSPATH中。当你正确地执行它时,JVM将找到它。