使用外部属性文件执行jar文件

3
我有一个包含主类的罐子,可以像这样执行: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(显然不起作用,但是可以让你了解我在这里尝试实现的内容)

代码没有起作用,所有三个都抛出NPE,尽管我将config.properties文件的路径放在了$PATH和$CLASSPATH下。
关键是,从长远来看,我会将配置文件放在${my-config-path}中,并正确地读取/处理它。但是临时的我只想要一些快速而肮脏的东西。
  1. 我不想将属性文件包含在我的jar中。
  2. 我希望将其保留在类路径或路径中,当我执行jar时,它可以轻松定位。

new FileInputStream(new File("config.properties")) 是什么意思? - Alexander
1
如果您没有文件路径,将会出现java.io.FileNotFoundException错误。 - Shengjie
我认为你可以在SO上找到如何使用$PATH和我的评论来实现这一点。 - Alexander
已经移交给QA团队,所以他们可以选择自己想要的路径。因此,暂时让他们使用一个系统属性-Dconfig.path ^^ - Shengjie
2个回答

5
一旦您指定了 -jar,所有的类路径选项都会被忽略。
相反,指定一个默认的配置位置(比如用户的主目录),并允许在命令行上进行覆盖。
有各种各样的命令行解析选项,最简单的方法是使用注释类属性来提供选项信息,例如长短选项名称、用法等。
或者使用 -D 选项并检索适当的系统属性。
另一种选择是使用 Preferences API。

0

一个示例样本

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接