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 がクラスパスでリソースを見つけられない場合にこれが発生することはわかっていますが、ここではそうではないようです。

ディレクトリ構造:-

  • コム
  • myjar.jar
  • 一部のプロパティ

私が実行しているコマンドは「java -jar myjar.jar」です

なぜこれが起こっているのかについてのフィードバック。これはクラスローダーと関係がありますか? Eclipse内からこのコードを実行すると、some.propertiesを問題なく取得しているように見えることを追加したいと思います。

4

1 に答える 1

0

に渡す引数から先頭のスラッシュを削除しますgetResourceAsStream()

JARを実行するときは、JAR外のフォルダをCLASSPATHに入れてください。マニフェストの CLASSPATH が、-cp を使用して渡す可能性のあるものをオーバーライドするかどうかはわかりません。それで遊びます; それらの1つが機能します。

JVM CLASSPATH にないため、.properties ファイルが見つかりません。適切に実行すると、JVM がそれを見つけます。

于 2012-10-01T00:11:40.793 に答える