Groovy:处理类路径资源加载的首选方式
Groovy: Preferred Way to Handle Classpath Resource Loading
根据我最初的研究,我发现我可以通过以下方法在 groovy 中加载类路径资源:
- this.getClass().getClassLoader.getResourceAsStream(资源名称)
- 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:
谢谢@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"))
}
}
我很快就会看一下反射,看看如何应用它。与此同时,您能否评论我的方法与使用反射?
谢谢!
根据我最初的研究,我发现我可以通过以下方法在 groovy 中加载类路径资源:
- this.getClass().getClassLoader.getResourceAsStream(资源名称)
- 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:
谢谢@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"))
}
}
我很快就会看一下反射,看看如何应用它。与此同时,您能否评论我的方法与使用反射?
谢谢!