【问题标题】:Accessing getResourceAsStream() of jar dependency访问jar依赖的getResourceAsStream()
【发布时间】:2018-09-16 12:22:19
【问题描述】:

我有 2 个项目; A 和 B(都是 Maven 项目)。 A 被打包为 jar 并作为依赖项添加到项目 B。这两个项目都有一个位于其 /resources 文件夹中的 config.properties 文件。在运行项目 B 时,位于项目 A 中的以下代码会加载 B 的资源文件夹:

Properties configProps = new Properties();
    try {
        InputStream in = classInA.class.getResourceAsStream("/config.properties");
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while ((line = br.readLine()) != null)
        {
            String values[] = line.split("=", 2);
            configProps.setProperty(values[0], values[1]);
            line = br.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

我在项目 B 的方法中有相同的代码块,并且可以正确访问 B 的 config.properties 文件。知道如何解决这个问题,或者您对如何在作为 jar 以及在 IDE (Intellij) 中运行时访问 jar 依赖项中的文件有更好的了解

编辑:包如下

  • com.nicky.projectA
  • com.nicky.projectB

由于项目 B 找到了一个 config.properties 文件,因此没有输出错误堆栈,但是它位于 com.nicky.projectB/resources 中,而不是 projectA 的资源文件夹中。

编辑:更改其中一个属性的文件名似乎已经解决了这个问题。我假设它首先搜索父项目并默认使用该属性文件,因为它们具有相同的名称。

【问题讨论】:

  • 显然A和B都有不同的包,所以必须根据项目包指定正确的路径。请添加错误堆栈@Nicky
  • 已编辑原始帖子。如果您需要更多信息,请告诉我。
  • 根据已编辑的问题,您需要像这样指定 -> classInA.class.getResourceAsStream("com.nicky.projectB/resources/config.properties");
  • 在 IDE 中直接从项目 B 运行以及在 IDE 中运行项目 A 时都会导致 NullPointerException。
  • 您知道Properties.load 方法吗?它几乎完全符合您的代码正在做的事情。

标签: java maven properties resources classpath


【解决方案1】:

getResourceAsStream("/config.properties") 在根目录下的类路径中搜索 config.properties。

不关心调用方法的代码是A.jar还是B.jar,文件是A.jar还是B.jar。

它扫描类路径,并返回找到的第一个 config.properties 文件。如果类路径中 A.jar 在 B.jar 之前,则返回 A 的配置文件。如果类路径中 B.jar 在 A.jar 之前,则返回 B 的配置文件。

这个问题正是包存在的原因:避免名称冲突。 A 的配置文件不应该在根目录下。它应该与 A 的类在同一个包中(例如com.mycompany.a)。 B 的配置文件应该和 B 的类在同一个包中(例如com.mycompany.b)。

一旦您以这种方式正确使用包,就像您可能已经为类所做的那样,您将不再有名称冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2017-01-25
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多