【问题标题】:Execute a jar with an external properties file使用外部属性文件执行 jar
【发布时间】:2012-04-25 01:34:06
【问题描述】:

我有一个带有 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 下,但所有三个都抛出 NPE。

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

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

【问题讨论】:

  • new FileInputStream(new File("config.properties"))?
  • 你没有文件的路径,你会得到 java.io.FileNotFoundException。
  • 我想你可以在 SO 中找到如何使用 $PATH 和我的评论来实现这一点。
  • 它已移交给 QA 团队,因此他们可以选择自己想要的路径。所以暂时让他们使用系统属性-Dconfig.path ^^

标签: java properties jar


【解决方案1】:

一旦指定-jar,所有类路径选项都会被忽略。

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

有多种命令行解析选项,最简单的用选项信息注释类属性,例如长短选项名称、用法等。

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

另一个选项是Preferences API。

【讨论】:

    【解决方案2】:

    一个示例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2011-08-18
      • 2016-11-29
      • 2014-12-30
      • 2016-11-30
      相关资源
      最近更新 更多