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)
结果相同。
使用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 文件中)文件夹中。
文件名有问题,我无法找出。重命名了文件,现在就可以了。
回答我的问题:
首先将资源添加到 .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. 就像看起来一样简单。
| 归档时间: |
|
| 查看次数: |
6266 次 |
| 最近记录: |