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

Groovy: Preferred Way to Handle Classpath Resource Loading

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

  1. this.getClass().getClassLoader.getResourceAsStream(资源名称)
  2. ClasspathResourceManager(我找不到任何示例)

所以,我想就什么是最'groovy'处理类路径资源的方式征求意见?

此外,我在 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) }

谢谢!

依次回答;

1:

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

和2:

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

谢谢@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"))
  }
}

我很快就会看一下反射,看看如何应用它。与此同时,您能否评论我的方法与使用反射?

谢谢!