当前位置: 首页 > 面试题库 >

Java加载jar中包含的资源

邵宜年
2023-03-14
问题内容

在我的应用程序中,我以这种方式加载资源:

WinProcessor.class.getResource("repository").toString();

这给了我:

file:/root/app/repository   (and I replace "file:" with empty string)

当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作:

java -jar app.jar

路径变为:

jar:/root/app.jar!/repository

有什么办法解决这个问题?

我将使用“存储库”目录名称来创建此目录:

ConfigurationContext ctx = (ConfigurationContext) ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryString, null);

以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它:

System.setProperty("javax.net.ssl.trustStore", fileNameString)

问题答案:

听起来你正在尝试使用a FileInputStream或类似方法加载资源。不要那样做:不要调用getResource,而是getResourceAsStream从中调用并读取数据。

(你可以改为从URL加载资源,但调用getResourceAsStream会更方便。)

编辑:看到了更新的答案后,似乎其他代码部分依赖于文件系统中物理单个文件中的数据。因此,答案是首先不要将其捆绑在jar文件中。你可以检查它是否在单独的文件中,如果不提取,则可以将其提取到临时文件中,但这确实是IMO。



 类似资料:
  • 问题内容: 我有一些可怕的行为。我有以下Maven配置: 这将创建包含所有类的JAR文件,但我在类路径中有一些资源也应包括在内。如果我将参数放在阶段的前面,那么我的所有资源都会包括在内。如果我使用运行Maven ,则不包含任何资源。我的资源位于(不是通常的目录)下。 问题答案: 目标配置中未正确定义资源的源目录。同样,outputDirectory元素将资源放置在dir中,默认情况下将其打包。试试

  • 我有一些可怕的比目鱼。我有以下Maven配置: 这创建了包含所有类的JAR fie,但我在类路径中有一些资源也应该包括在内。如果我将参数留在phase前面,那么我的所有资源都包括在内了。如果我使用运行maven,则不包含任何资源。我的资源在(不是通常的目录)下。

  • 所以我在堆栈交换上尝试了各种读取此问题的各种修复,大多数说使用方法,我已经完成了。这是我的Jar资源输入法。 这将在我的ImageLoader类中使用。 并使用将图像加载到主程序中 现在在eclipse中,游戏运行并加载所有图像非常好。但我想做的是将其导出到Jar,我使用一些教程完成了这一点,并成功地将其导出到包含我使用的图像的资源文件夹中。但是当我尝试运行. jar文件时,cmd行中会弹出此错误

  • 问题内容: 是否可以指定一个Java ,其中包含另一个JAR文件中包含的JAR文件? 问题答案: 如果您试图创建一个包含应用程序及其所需库的jar,则有两种方法(我知道)。第一个是One-Jar,它使用特殊的类加载器来允许jar的嵌套。第二个是UberJar(或Shade),它会爆炸包含的库并将所有类放在顶级jar中。 我还应该提到UberJar和Shade分别是Maven1和Maven2的插件。

  • 在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。 使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没