Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PathMatchingResourcePatternResolver-查找org.springframework.core.io.Resource设置为“0”的原因;文件:/";一定要_Java_Spring_Classpath - Fatal编程技术网

Java PathMatchingResourcePatternResolver-查找org.springframework.core.io.Resource设置为“0”的原因;文件:/";一定要

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

我下面有一些代码,用于扫描我的batis mapper文件。我正在扫描我的Batis文件,但我认为我的问题更多的是Spring问题

列出的代码运行良好,但当我向存储在本地maven repo中的某个外部库添加依赖项时,PathMatchingResourcePatternResolver.getResources()方法会为特定jar返回“file:/”的资源。这导致spring在我的整个C驱动器中搜索映射程序文件

我能够确定是什么jar导致了这种行为,但我不确定解决方案是什么。为什么Spring将资源设置为“file:/”?我不确定这个jar与其他返回正常资源条目的jar相比有什么问题

//这来自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()]);