Groovy:处理类路径资源加载的首选方法

时间:2015-10-27 22:18:19

标签: groovy resources classpath

从我最初的研究中我发现我可以通过以下方法在groovy中加载类路径资源:

  1. this.getClass()。getClassLoader.getResourceAsStream(资源名称)
  2. ClasspathResourceManager(我找不到任何示例)
  3. 所以,我想就什么是处理类路径资源的最“常规”方式征求意见?

    此外,我在jar中的'xsd'目录下有一个'* .xsd'文件列表。无论如何我可以做类似的事情,但是有类路径资源吗?

    List<StreamSource> schemaDefinitions = new File('src/main/resources/xsd')
      .listFiles( { dir, file -> file ==~ /.*\.xsd/ } as FilenameFilter )
      .collect { new StreamSource(it) }
    
    // Looking for something like this:
    List<StreamSource> schemaDefinitions = this.getClass().getResource('src/main/resources/xsd')
      .listFiles( { dir, file -> file ==~ /.*\.xsd/ } as FilenameFilter )
      .collect { new StreamSource(it) }
    

    谢谢!

2 个答案:

答案 0 :(得分:1)

依次回答;

1:

String xsd = this.getClass().getResource('/xsd/file.xsd').text

而且2:

没有。但是there's a library that makes it easy

答案 1 :(得分:1)

感谢@tim_yates的快速回复。

由于我写的图书馆非常薄,我现在犹豫是否要引入像反思一样的依赖,所以现在我选择了这个解决方案:

private List<StreamSource> retrieveSchemaDefinitionsFromClasspath(String classpathXsdDir) {
  ClasspathResourceManager resourceManager = new ClasspathResourceManager()
  List<String> schemaDefinitionFileNames = resourceManager.getReader(classpathXsdDir).text.split()
  schemaDefinitionFileNames.findAll { it ==~ /.*\.xsd$/ }.collect {
    new StreamSource(resourceManager.getReader("$classpathXsdDir/$it"))
  }
}

我将很快看一下反思,看看我如何应用相同的反思。与此同时,你能否评论我的方法与使用反思?

谢谢!