1

Maven onejar プラグイン ( https://code.google.com/p/onejar-maven-plugin/ ) を使用して uberjar を作成しています。

次のように、クラスパスのルートにあるプロパティ ファイルにアクセスしたい:

Properties prop = new Properties();

        try {
            prop.load(new FileInputStream("Db.properties"));

            driver = prop.getProperty("driver");
            url = prop.getProperty("url");
            username = prop.getProperty("username");
            password = prop.getProperty("password");

        } catch (IOException ex) {
            LOG.debug(ex.toString());
        }   

        conn = null;

ロギングを実行できるため、同じディレクトリにある log4j.properties ファイルが見つかりました...何が問題ですか? :/ しかし、Db.properties が見つかりません。

4

1 に答える 1

1

FileInputStreamは、ファイル システムにあるファイルからリソースをロードするために使用されます。jar 内のファイルはファイル システム上にありません。別のInputStreamを使用する必要があります。

この場合、ClassLoader#getResourceAsStream(String)メソッドを使用することをお勧めします。クラスパスで見つかった InputStream リソースを返します。何かのようなもの:

InputStream is = getClass().getClassLoader().getResourceAsStream("/Db.properties");

動作するはずです。または便宜上:

InputStream is = getClass().getResourceAsStream("/Db.properties");

注目すべきは、log4j.properties動作する理由は、設計上、Log4j がルート クラスパスに構成ファイルをロードできるためです。

于 2013-03-22T18:09:52.527 に答える