Java PathMatchingResourcePatternResolver-查找org.springframework.core.io.Resource设置为“0”的原因;文件:/";一定要
我下面有一些代码,用于扫描我的batis mapper文件。我正在扫描我的Batis文件,但我认为我的问题更多的是Spring问题 列出的代码运行良好,但当我向存储在本地maven repo中的某个外部库添加依赖项时,PathMatchingResourcePatternResolver.getResources()方法会为特定jar返回“file:/”的资源。这导致spring在我的整个C驱动器中搜索映射程序文件 我能够确定是什么jar导致了这种行为,但我不确定解决方案是什么。为什么Spring将资源设置为“file:/”?我不确定这个jar与其他返回正常资源条目的jar相比有什么问题Java PathMatchingResourcePatternResolver-查找org.springframework.core.io.Resource设置为“0”的原因;文件:/";一定要,java,spring,classpath,Java,Spring,Classpath,我下面有一些代码,用于扫描我的batis mapper文件。我正在扫描我的Batis文件,但我认为我的问题更多的是Spring问题 列出的代码运行良好,但当我向存储在本地maven repo中的某个外部库添加依赖项时,PathMatchingResourcePatternResolver.getResources()方法会为特定jar返回“file:/”的资源。这导致spring在我的整个C驱动器中搜索映射程序文件 我能够确定是什么jar导致了这种行为,但我不确定解决方案是什么。为什么Sprin
//这来自Spring PathMatchingResourcePatternResolver类
受保护资源[]findPathMatchingResources(字符串位置模式)引发IOException{
字符串rootDirPath=determineRootDir(locationPattern);
String subPattern=locationPattern.substring(rootDirPath.length());
Resource[]rootDirResources=getResources(rootDirPath);
设置结果=新LinkedHashSet(16);
for(资源rootDirResource:rootDirResources){
rootDirResource=resolveRootDirResource(rootDirResource);
URL rootDirUrl=rootDirResource.getURL();
if(equinoxResolveMethod!=null){
if(rootDirUrl.getProtocol().startsWith(“bundle”)){
rootDirUrl=(URL)ReflectionUtils.invokeMethod(equinoxResolveMethod,null,rootDirUrl);
rootDirResource=新的UrlResource(rootDirUrl);
}
}
if(rootDirUrl.getProtocol().startsWith(ResourceUtils.URL\u PROTOCOL\u VFS)){
addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirUrl,子模式,getPathMatcher());
}
else if(ResourceUtils.isJarURL(rootDirUrl)| | isJarResource(rootDirResource)){
addAll(doFindPathMatchingJarResources(rootDirResource,rootDirUrl,子模式));
}
否则{
addAll(doFindPathMatchingFileResources(rootDirResource,子模式));
}
}
if(logger.isDebugEnabled()){
logger.debug(“解析的位置模式[“+locationPattern+”]到资源”+结果);
}
返回result.toArray(新资源[result.size()]);
什么是rootDirResources
?添加了生成rootDirResources.is的类,该类来自spring PathMatchingResourcesPatternResolver.findPathMatchingResources()方法感谢您显示了大量不相关的信息,现在让我们尝试一些相关信息:您正在询问为什么文件:/
位于rootDirResources
中。它是通过调用getResources(rootDirPath)构建的
,我们看不到,它需要一个rootDirPath
参数。rootDirPath
是通过调用determineRootDir(locationPattern)构建的
,我们也看不到它,它需要一个locationPattern
参数。locationPattern
是一个参数,我们不知道它的值。因此,我们有一个未知值,通过两个未知方法传递,您希望我们能够告诉您为什么内容是这样的?请尝试调试代码以查看值的来源他是从哪里来的。
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
Resource configLocation = patternResolver.getResource("classpath:mybatis/mybatis.config.xml");
//this line leads to the issue
Resource[] mapperLocations1 = patternResolver.getResources("classpath*:**/*Mapper.xml");
//this is from the Spring PathMatchingResourcePatternResolver class
protected Resource[] findPathMatchingResources(String locationPattern) throws IOException {
String rootDirPath = determineRootDir(locationPattern);
String subPattern = locationPattern.substring(rootDirPath.length());
Resource[] rootDirResources = getResources(rootDirPath);
Set<Resource> result = new LinkedHashSet<Resource>(16);
for (Resource rootDirResource : rootDirResources) {
rootDirResource = resolveRootDirResource(rootDirResource);
URL rootDirUrl = rootDirResource.getURL();
if (equinoxResolveMethod != null) {
if (rootDirUrl.getProtocol().startsWith("bundle")) {
rootDirUrl = (URL) ReflectionUtils.invokeMethod(equinoxResolveMethod, null, rootDirUrl);
rootDirResource = new UrlResource(rootDirUrl);
}
}
if (rootDirUrl.getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)) {
result.addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirUrl, subPattern, getPathMatcher()));
}
else if (ResourceUtils.isJarURL(rootDirUrl) || isJarResource(rootDirResource)) {
result.addAll(doFindPathMatchingJarResources(rootDirResource, rootDirUrl, subPattern));
}
else {
result.addAll(doFindPathMatchingFileResources(rootDirResource, subPattern));
}
}
if (logger.isDebugEnabled()) {
logger.debug("Resolved location pattern [" + locationPattern + "] to resources " + result);
}
return result.toArray(new Resource[result.size()]);