使用spring pathmatchingresourcepatternresolver时发生java.net.urisyntaxexception异常

xeufq47z  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(196)

我使用spring的pathmatchingresourcepatternresolver类从jar动态加载资源。
示例代码:

String RESOURCE_CLASSPATH = "classpath*:**/xyz/abc/**/*"

String RESOURCE1 = "(.)+/xyz/abc/resource/([A-Za-z]+)-resource1.zip"

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(Test.class.getClassLoader());
Resource[] resources = resolver.getResources(RESOURCE_CLASSPATH);

for (Resource resource : resources) {
    if (identifyResource1(resource.getURI().toString()))
        // add to resource1 list
}

private boolean identifyResource1(String resource) {
    return Pattern.matches(RESOURCE1, resource);
}

上面的代码在ide(intellij)中运行得非常好,并从jar中提供了正确的数据。
如果我在命令提示符下以junit(使用maven进行构建过程)运行代码,则相同的代码不起作用。
错误如下:

Caused by: java.net.URISyntaxException: Illegal character in opaque part at index 11: jar:file:C:\Users\<.m2_location>myTest.jar!/.../.../.../xyz/abc/resource/TestJar1-resource1.zip

我想这是因为file:c:'应该在哪里的部分'文件:/c:'
当我在intellij中运行相同的代码时,我得到以下路径:

jar:file:/C:/Users/<.m2_location>myTest.jar!/.../.../.../xyz/abc/resource/TestJar1-resource1.zip

问。如何在junit代码执行期间解决这个问题?
更多信息:在这两种情况下打印classloader:
intellij:java.net.urlclassloader
junit:sun.misc.launcher$appclassloader

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题