在使用Maven捆绑JAR文件中的资源时,我有一种感觉,我错过了一些关键的东西。我的目录结构是标准的Maven结构(即\src\main\java,\src\main\Resources)。
使用IDE时,我将资源文件引用为\main\resources\images\blah。。。它工作得很好,但当Maven捆绑JAR文件时,它会将路径放在相对于根的位置(“\ images\blah”),因此没有一条路径是正确的。
我的问题有两个方面,第一个是我是否遗漏了一些明显的东西?第二个是处理这个问题的最佳方法是什么?我知道当我捆绑所有用于部署的内容时,我可以替换所有路径,或者包围try/catch块中的所有路径,甚至更改maven输出目录,但我觉得这些都很优雅,我错过了一些东西。提前谢谢。
编辑:我引用如下资源文件:getClass()。getResource(“/main/resources/images/lightboardImage.jpg”)
EDIT2:这显然是一个IDE配置问题,可能是因为我使用Maven将一个旧项目转换为一个旧项目。我真的不明白它是怎么被误解的。我的文件夹结构是:
src/main/java
我的类路径有一个“src”的条目
如果我右键单击
/main/resources/images/
文件夹并将其用作源文件夹,则会将classpathentry转换为以下内容
EDIT3:好吧,这真的很愚蠢,但我刚刚意识到问题是什么。我实际上并没有使用Maven进行本地开发构建。它使用Eclipse内置的Ant配置或其他什么。Maven用于自动部署构建,因此出现了问题。抱歉浪费大家的时间。
我认为这里的问题是,您需要将IDE设置为指向类路径中的src/main/resources。然后可以使用getClass()。getResource(“images\lightboardImage”)用于在maven下运行和从IDE运行。
例如,在Eclipse中,您可以在项目浏览器中右键单击src/main/resources,然后单击“构建路径”-
匿名用户
这应该在IDE和JAR中工作。
getClass().getResource("images/lightboardImage.jpg");
来自src/main/资源
的文件被复制到目标/类
。
在运行时,所有资源都应该可以从类路径中看到,如<代码>图像/lightboardImage。jpg。这是IDE为我提供的。如果没有,请检查IDE配置,如@juanluisrp所述。
从我的IDE执行的Java如下所示:
java -classpath (...) /home/.../target/classes (...)
因此,运行时类路径被配置为目标/类目录。
在Maven的生命周期中,资源被复制到目标/类
。当JAR组装目标/类
时,内容会转到JAR根目录。因此,如果您想加载JAR中的资源,您可以使用
getClass().getResource("/images/lightboardImage.jpg"));
从IDE中,它应该使用相同的路径,除非您没有正确配置类路径。如果您使用Eclipse,请检查src/main/Resources
是否标记为源文件夹。
我有一个SpringWeb应用程序,它是作为maven工件a.war创建的。它有一个maven依赖项和一个工件B.jar。工件B的src/main/resources有一个文件测试。txt。我想读一下测试文件。来自神器A.war的txt。当我引爆B.jar时,我看到了测试结果。jar的根位于txt中。在A中,我尝试使用文件f=new ClassPathResource(“test.txt”)读取该
我正在尝试将资源csv文件传递到我的Sprint Boot应用程序使用的jar中。尽管方法获取的资源参数=ReactiveWebContext资源[src/main/Resources/file.csv],但我总是得到该文件不存在的响应 > 在我的项目中,文件位于src/main/resources/file中。csv 正在应用中。属性,我定义: 在config类中: 在内部jar:Config类
问题内容: 当使用并提供一个相当通用的资源名称(如)时,Java可能会从CLASSPATH前面列出的另一个JAR文件中加载资源,但可能与我的应用程序完全无关。有没有一种方法可以强制ClassLoader 首先 尝试从我的课程所在的同一JAR文件中加载资源,并且只有在未找到的情况下,才可以在CLASSPATH上查找其他JAR? 问题答案: 另外,如果您知道文件所在的确切jar,则可以使用JarURL
我在maven项目的src/main/resource文件夹中下载了.sh文件,我正在通过下面的代码阅读它 如果我使用jar EX作为应用程序运行:- java-jar runscript.jar SCHEMA_NAME /users/ideaprojects/runscript/target/file:/users/ideaprojects/runscript/target/runscripts
问题内容: 我可以使用ClassLoader实现从InputStream加载类吗? 我正在尝试将具有InputStream的JAR加载到新的ClassLoader中。 问题答案: 这不太可能,因为您会发现自己尝试这样做。您将无法根据需要随机访问和查找类,因此您必须将内容缓存在内存或文件系统中。 如果您在磁盘上缓存,则只需使用URLClassLoader即可。 如果缓存在内存中,则需要使用JarIn
问题内容: 在我的应用程序中,我以这种方式加载资源: 这给了我: 当我从IDE运行我的应用程序时,但是当我运行应用程序的jar时,这可以很好地工作: 路径变为: 有什么办法解决这个问题? 我将使用“存储库”目录名称来创建此目录: 以相同的方式,我将获得一个文件名(而不是目录),并以这种方式使用它: 问题答案: 听起来你正在尝试使用或类似方法加载资源。不要那样做:不要调用,而是从中调用并读取数据。