使用外部属性文件执行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 }
我同时运行:
-
java -jar test.jar
-
java -jar test.jar -cp / tmp(config.properties所在的位置)
-
java -jar test.jar -cp /tmp/config.properties(显然它不起作用,但是让你知道我想在这里实现的目标)
代码不起作用,虽然我将config.properties文件的路径放在$ PATH和$ CLASSPATH下,但三者都抛出了NPE。
关键是,从长远来看,我会将配置文件放在$ {my-config-path}中,并正确读取/处理它。 但在时间上我只想要快速而肮脏的东西。
- 我不想在我的jar中包含属性文件。
- 我想在类路径或路径中将它保留在外部,当我执行jar时,它会毫无问题地找到它。
指定-jar
将忽略所有类路径选项。
而是指定默认配置位置(如在用户的主目录中)并允许在命令行上覆盖。
有各种命令行解析选项,最简单的带有选项信息的annotate类属性,例如,长和短选项名称,用法等。
或者使用-D
选项并检索适当的系统属性。
另一个选项是Preferences
API。
一个示例示例
@Echo off java -cp "C:/***/***" -Dlog4j.configuration=file:C:/***/***/log4j.properties com.****.****.MainMethod %1 %2 ... pause