0

我正在尝试加载一个名称在属性文件中指定的类。这是相同的代码。

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 无法在类路径中找到资源时会发生这种情况,但这里似乎并非如此。

目录结构:-

  • com
  • myjar.jar
  • 一些.properties

我正在执行的命令是“java -jar myjar.jar”

关于为什么会发生这种情况的任何反馈。这可能与类加载器有关吗?我想补充一点,当我在 Eclipse 中运行此代码时,它似乎可以很好地获取 some.properties。

4

1 回答 1

0

从传递给的参数中删除前导斜杠getResourceAsStream()

执行 JAR 时,将 JAR 外部的文件夹放入 CLASSPATH。我不知道清单 CLASSPATH 是否会覆盖您可能使用 -cp 传递的那个。玩它;其中之一将工作。

它没有找到您的 .properties 文件,因为它不在 JVM CLASSPATH 中。当您正确执行此操作时,JVM 会找到它。

于 2012-10-01T00:11:40.793 回答