我正在尝试扫描我的类路径以查找与特定模式匹配的配置文件。我正在使用corn-cps。
我正在寻找的文件打包在jar中,我可以使用java的默认
找到它MyClass.class.getClassLoader().getResource("jmulticonfig.3.properties")
返回
jar:file:/tmp/testjar.jar!/jmulticonfig.3.properties
我想找到所有jmulticonfig。*。属性,所以我的corn-cps代码是
List<URL> resources = CPScanner.scanResources(
new ResourceFilter()
.packageName("*")
.resourceName("jmulticonfig.*.properties")
);
运行时会返回一个空列表。
任何有玉米cps经验的人都可以提供帮助或建议吗?
编辑:要获得@approxiblue的好建议,可以在https://github.com/kanesee/jmulticonfig找到代码。 请确保将src / main / resources / jmulticonfig-3.jar添加到类路径中。它包含jmulticonfig.3.properties,我试图用corn-cps读取的文件
答案 0 :(得分:1)
我认为您在corn-cps库中发现了某种错误,因为如果您调试运行代码的类,似乎资源名称丢失了。
无论如何,以下JmultiConfig.getConfig()实现会找到您使用正则表达式搜索的所有资源:
public static synchronized Properties getConfig() {
System.out.println("---");
if (s_props == null) {
List<URL> resources = CPScanner.scanResources(new ResourceFilter().archiveName("*"));
for (URL resource : resources) {
if (resource.getFile().matches(".*jmulticonfig\\..*\\.properties$")) {
System.out.println("*** -> " + resource);
}
}
}
return s_props;
}
可以修改正则表达式以匹配您需要的任何内容。
答案 1 :(得分:1)
您正尝试从默认包""
获取资源。
但corn-cps
有一个错误从该包中读取资源(net.sf.corn.cps.RootedUrl
第63行的条件因这些资源而失败。)
要获得解决方法,您可以将资源放在另一个包中,例如:包res
并过滤该包:
List<URL> resources = CPScanner.scanResources(
new ResourceFilter().packageName("res").resourceName("jmulticonfig.*.properties")
);
过滤器.packageName(*)
还会查找除默认包之外的所有包中的资源。
Max的解决方案也有效,但是需要为类路径中的每个资源构建一个URL对象(除了rt.jar,不包括在corn-cps中)。