【问题标题】:Maven onejar plugin, get a properties fileMaven onejar插件,获取属性文件
【发布时间】:2013-03-22 18:00:04
【问题描述】:

我正在使用 Maven onejar 插件 (https://code.google.com/p/onejar-maven-plugin/) 创建一个 uberjar。

我想访问位于我的类路径根目录中的属性文件,如下所示:

Properties prop = new Properties();

        try {
            prop.load(new FileInputStream("Db.properties"));

            driver = prop.getProperty("driver");
            url = prop.getProperty("url");
            username = prop.getProperty("username");
            password = prop.getProperty("password");

        } catch (IOException ex) {
            LOG.debug(ex.toString());
        }   

        conn = null;

找到了位于同一目录中的 log4j.properties 文件,因为我可以进行日志记录...我的问题是什么? :/ 但是找不到 Db.properties。

【问题讨论】:

  • Db.properties 是否打包在 jar 中?
  • 是的,我正在打开我的reminder.one-jar.jar -> main ->reminder.jar,在这个 jar 文件中是我的 Db.properties 文件,路径与 log4j.properties 相同

标签: java maven uberjar


【解决方案1】:

FileInputStream 用于从位于文件系统上的文件中加载资源。 jar 中的文件不在文件系统上。您需要使用不同的InputStream

对于这种情况,建议使用ClassLoader#getResourceAsStream(String) 方法。它返回在类路径中找到的 InputStream 资源。比如:

InputStream is = getClass().getClassLoader().getResourceAsStream("/Db.properties");

应该可以。或者为了方便:

InputStream is = getClass().getResourceAsStream("/Db.properties");

值得注意的是,log4j.properties 工作的原因是因为 Log4j 在设计上可以加载根类路径中的配置文件。

【讨论】:

  • Mh... 它仍然不起作用.. InputStream i = getClass().getResourceAsStream("Db.properties");尝试 { prop.load((FileInputStream)i);
  • 我明白了!我在 Db.properties 前面添加了一个斜杠!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
相关资源
最近更新 更多