2015-10-27 59 views
0

從我最初的研究,我發現,我可以通過以下方法加載在常規的classpath資源:Groovy:在首選的應對Classpath的資源裝載

  1. this.getClass()getClassLoader.getResourceAsStream(資源名稱)
  2. ClasspathResourceManager(對此我無法找到任何的例子)

所以,我想尋求的是什麼處理的classpath資源最「時髦」的方式意見?另外,我的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) } 

謝謝!

回答

0

答案依次;

1:

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

和2:

不可以,但there's a library that makes it easy

+0

感謝Tim的快速回復!我試圖發佈我在這裏的解決方案,但我超過了字符限制。所以,我會把它作爲答案發布。 你能評論我的方法與使用反射嗎? –

0

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

我會看看很快就會有反思,看看我可以如何應用。與此同時,請您對我的方法與使用反射進行評論嗎?

謝謝!