使用corn-cps扫描匹配通配符模式的配置文件

时间:2015-10-11 18:09:40

标签: java

我正在尝试扫描我的类路径以查找与特定模式匹配的配置文件。我正在使用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读取的文件

2 个答案:

答案 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中)。