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

时间:2017-07-06 14:45:49

标签: java file maven jar

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

fcntl.h

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

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>

为url分配了String resourceName = "myTemplateResource.json"; URL url = MyClass.class.getClassLoader().getResource(resourceName); 值。它发生在图书馆的测试和依赖项目中。什么缺失的暗示?

还使用

进行了测试
null

MyClass.class.getResource("/myTemplateResourceName.json");

具有相同的结果。

2 个答案:

答案 0 :(得分:3)

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

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream(locaiton);

例如:如果文件'myTemplateResourceName.json'直接位于resources文件夹中,请仅使用文件名。如果在路径前添加斜杠(/),则会出错。

InputStream inputStream = classLoader.getResourceAsStream("myTemplateResourceName.json");

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

答案 1 :(得分:1)

我无法找到的文件名有问题。重命名该文件,现在没事了。

回答我的问题:

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

<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>

然后访问您的文件。

URL url = MyClass.class.getClassLoader().getResource(resourceName);

从那里你可以获得InputStream。看起来很简单。