使用外部属性文件执行jar

我有一个带有main类的jar,它可以执行如下:java -jar test.jar

在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下,但三者都抛出了NPE。

关键是,从长远来看,我会将配置文件放在$ {my-config-path}中,并正确读取/处理它。 但在时间上我只想要快速而肮脏的东西。

  1. 我不想在我的jar中包含属性文件。
  2. 我想在类路径或路径中将它保留在外部,当我执行jar时,它会毫无问题地找到它。

指定-jar将忽略所有类路径选项。

而是指定默认配置位置(如在用户的主目录中)并允许在命令行上覆盖。

有各种命令行解析选项,最简单的带有选项信息的annotate类属性,例如,长和短选项名称,用法等。

或者使用-D选项并检索适当的系统属性。

另一个选项是Preferences API。

一个示例示例

 @Echo off java -cp "C:/***/***" -Dlog4j.configuration=file:C:/***/***/log4j.properties com.****.****.MainMethod %1 %2 ... pause