3

私は次のように実行できるmain-classのjarを持っています:java -jar test.jar

瓶の中に私は次のようなものがあります

public static void main(String[] args) throws IOException {
    InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("config.properties");
    Properties prop = new Properties();
    prop.load(is);
    //then I wanna fetch all the properties in the config.properties file
}

私は両方を実行します:

  1. java -jar test.jar

  2. java -jar test.jar -cp / tmp(config.propertiesが配置されている場所)

  3. java -jar test.jar -cp /tmp/config.properties(明らかに機能しませんが、ここで何を達成しようとしているのかがわかります)

コードは機能しませんでした。config.propertiesファイルのパスを$PATHと$CLASSPATHの下に置いたにもかかわらず、3つすべてがNPEをスローしました。

重要なのは、長期的には、構成ファイルを$ {my-config-path}に配置し、それを適切に読み取り/処理することです。しかし、一時的に私はただ速くて汚いものが欲しいだけです。

  1. プロパティファイルをjarファイルに含めたくありません。
  2. クラスパスまたはパスの外部に保持したいのですが、jarを実行すると、問題なく検索されます。
4

2 に答える 2

5

指定すると、-jarすべてのクラスパスオプションは無視されます。

代わりに、デフォルトの構成場所(ユーザーのホームディレクトリなど)を指定し、コマンドラインでのオーバーライドを許可します。

さまざまなコマンドライン解析オプションがあり、オプション情報を使用してクラスプロパティに注釈を付けるのが最も簡単です。たとえば、長いオプション名と短いオプション名、使用法などです。

または、-Dオプションを使用して、適切なシステムプロパティを取得します。

もう1つのオプションはPreferencesAPIです。

于 2012-04-12T17:03:55.783 に答える
0

1つのサンプル例

@Echo off
java -cp "C:/***/***" -Dlog4j.configuration=file:C:/***/***/log4j.properties com.****.****.MainMethod %1 %2 ...
pause
于 2018-10-10T22:39:45.597 に答える