提问人:davidalayachew 提问时间:8/4/2023 更新时间:8/4/2023 访问量:55
如何在编译 TO 和 NOT TO JAR 文件时以相同的方式指定资源位置
How to specify resource location in the same way when compiling TO and NOT TO a JAR file
问:
我有一个项目,我正在使用 .我希望能够获取资源,而不必先将我的项目构建到 JAR 文件中,但与此同时,我也不想对位置进行硬编码 (C://Users/name/etc)。javac
我知道,如果我有一个JAR文件,我可以从那里使用并调用资源方法之一。或者,如果我的资源包含在另一个 JAR 文件中,并且该 JAR 文件位于我的类路径上,那么我可以以类似的格式从 JAR 文件中获取它。ClassLoader
但是,当我只在javac中编译时,我该怎么做呢?当我最终将其转换为 JAR 文件时,我不想重新设计我所有的资源获取逻辑,但我也不想每次编译时都制作一个 jar 文件并想要测试更改。我只是希望能够向 Java 指定这是查找我的资源的位置,当我最终决定制作 JAR 文件时,我不想改变该策略。
答:
您可以像在 jar 中一样在文件夹中查找资源。只需确保在运行 java 时列出包含资源的文件夹,并且代码中的相对路径与之对应即可。-cp
下面是一个示例。
java -cp ".;first/path/to/resource/folder;second/path;third/path" PackageName.NameOfClassContainingMainMethod
也就是说,该资源可能位于已编译代码所在的同一文件夹中。在这种情况下,无需通过 显式提供它。-cp
每当您在代码中加载资源时,/ java 都会在类路径中查找它。提供 .jar(本质上只是一个压缩文件夹)和原始文件夹只是指定要加载到类路径中的内容的另一种方法。ClassLoader.getResource
getResourceAsStream
评论
-cp
CLASSPATH