如何从打包到其自己的 .jar 中的 Java 库访问资源

Ale*_*lex 7 java jar file maven

我有一个库项目,其中包含一些我想加载和使用的资源。我将在另一个项目中使用这个库,所以我必须将资源打包到 .jar 中。这是如何实现的:

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>
Run Code Online (Sandbox Code Playgroud)

尝试检索文件时出现问题,我这样做:

String resourceName = "myTemplateResource.json";
URL url = MyClass.class.getClassLoader().getResource(resourceName);
Run Code Online (Sandbox Code Playgroud)

url 被分配了一个null值。它发生在库的测试和依赖项目中。缺少什么的任何提示?

还测试使用

MyClass.class.getResource("/myTemplateResourceName.json");
Run Code Online (Sandbox Code Playgroud)

MyClass.class.getClassLoader().getResource("src/main/resources/myTemplateResource.json");
Run Code Online (Sandbox Code Playgroud)

结果相同。

Hir*_*era 5

使用getResourceAsStream()方法从 .jar 文件中加载资源,如下所示:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream(locaiton);
Run Code Online (Sandbox Code Playgroud)

例如:如果文件“myTemplateResourceName.json”直接位于资源文件夹中,则仅使用文件名。如果在路径前添加斜线 (/) 是错误的。

InputStream inputStream = classLoader.getResourceAsStream("myTemplateResourceName.json");
Run Code Online (Sandbox Code Playgroud)

注意:您必须将资源文件放在用于创建 jar 文件的项目中的main/resources(不要将其保留在该test/resources部分中,因为它没有打包在 jar 文件中)文件夹中。


Ale*_*lex 5

文件名有问题,我无法找出。重命名了文件,现在就可以了。

回答我的问题:

首先将资源添加到 .pom 文件上的 jar 中。

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后访问您的文件。

URL url = MyClass.class.getClassLoader().getResource(resourceName);
Run Code Online (Sandbox Code Playgroud)

从那里您可以获得一个InputStream. 就像看起来一样简单。