我使用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
暂无答案!
目前还没有任何答案,快来回答吧!