我试图加载具有特定文件扩展名的所有资源,这些资源在运行时使用URLClassloader动态加载.
不幸的是,当我使用模式时,PathMatchingResourcePatternResolver不返回任何资源classpath*:/*.myextension
.当我指定一个文件的完整名称,如classpath*:/test.myextension
资源加载,所以我认为类加载器配置正确.
URLClassloader classloader = new URLClassloader(jarURLs); // jarURLs look like "file:C:/Temp/test.jar"
Thread.getCurrentThread().setContextClassloader(classloader)
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(classloader);
Resource[] resources = resolver.getResources("classpath*:/*.myextension") // yields empty array
....
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我必须动态加载jar,我不提前知道资源名称.
Tec*_*rip 33
在Spring中动态加载文件很简单,我会改变查找带扩展名的文件的方法.
请尝试以下方法:
ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
Resource[] resources = resolver.getResources("classpath*:/*.xml") ;
for (Resource resource: resources){
logger.info(resource.getFilename());
}
Run Code Online (Sandbox Code Playgroud)
los*_*and 10
正如Tech Trip在评论中提到的那样,我的模式中出现了错误.在Spring的文档也安静明确有关(见警告)"的classpath*:"在与Ant风格的图案相结合,将仅模式开始前可靠地与至少一个根目录下工作......从限制起源JDK的ClassLoader.getResources()
所以我改变了我的模式
classpath*/model/*.myextension
Run Code Online (Sandbox Code Playgroud)
由于JAR是从xText-DSL创建的,因此我必须强制执行必须使用模型文件夹的约定.
归档时间: |
|
查看次数: |
26657 次 |
最近记录: |