java—使用pathmatchingresourcepatternresolver获取war文件中的src/main/resources时出现问题

o7jaxewo  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(447)

我正在使用spring的pathmatchingresourcepatternresolver尝试获取当前在src/main/resources目录中的.jmx文件(jmeter测试)的列表。这将作为aws上的war文件托管。
当我在本地工作时,这个代码块会给出resources/目录中.jmx文件的列表,但我知道不能使用本地文件路径:

PathMatchingResourcePatternResolver resolver =
                   new PathMatchingResourcePatternResolver(MyClass.class.getClassLoader());
Resource[] resources = resolver.getResources("file:/C:/Users/user.name/repos/my-repo/src/main/resources/dailyTests/*.jmx")

我一直在尝试使用classpath*:这实际上几乎是可行的:

Resource[] resources = resolver.getResources("classpath*:*.jmx");

这将获得所有.jmx文件,其URL如下所示:

file:/C:/Users/user.name/repos/my-repo/target/classes/my_jmeter_test.jmx

但我也需要能够处理resources目录的子目录。当我试图说得更具体些时,我相信我输入了错误的模式。据我所知,在使用classpath时,仍然需要在classpath之后使用根目录,但我不确定应该是什么。
到目前为止我已经试过了

Resource[] resources = resolver.getResources("classpath*:Users/*.jmx");
Resource[] resources = resolver.getResources("classpath*:classes/*.jmx");
Resource[] resources = resolver.getResources("classpath*:WEB-INF/*.jmx");
Resource[] resources = resolver.getResources("classpath*:com/*.jmx");

以及其他许多猜测,所有这些都返回0个资源。似乎当我更具体一步的时候,我就得到了0个资源。
我想我可能误解了我应该如何导航一个war文件,或者可能只是误解了classpath*给了我什么。我完全离开这里了吗?

fivyi3re

fivyi3re1#

原来是我不了解在使用maven时src/main/resources在war文件中的最终位置。src/main/resources中的任何文件都将被复制到war文件的根目录中(在此处的选定答案中注明)。
使用spring的pathmatchingresourcepatternresolver时, classpath* 获取战争的根源,所以这就是为什么我使用以下命令获取.jmx文件:

Resource[] resources = resolver.getResources("classpath*:*.jmx");

从这里开始,如果我的项目需要嵌套目录中的更多文件,比如src/main/resources/specialtest。我可以使用:

Resource[] resources = resolver.getResources("classpath*:specialTest/*.jmx");

根据文件,有一件事我不确定:
警告:请注意,“classpath*:”与ant样式模式结合使用时,在模式启动之前,将只能可靠地与至少一个根目录一起工作,除非实际的目标文件驻留在文件系统中。这意味着像“classpath*:.xml”这样的模式不会从jar文件的根目录中检索文件,而是只从扩展目录的根目录中检索文件。
我以为这意味着我无法从war文件的根目录获取文件,但这正是我正在做的。目前看来,当我使用“classpath
:*.jmx”时,我只从根目录中获取.jmx文件,如果我想要更深入的内容,我必须添加一个根目录来启动模式。如果我完全弄清楚这是否正确,我会尝试更新。

相关问题