2015-10-27 1 views
0

De mes premières recherches que j'ai trouvé que je peux charger des ressources classpath dans groovy par les approches suivantes:.Groovy: préféré façon de gérer Classpath Chargement des ressources

  1. this.getClass() getClassLoader.getResourceAsStream (resourceName)
  2. ClasspathResourceManager (pour lequel je ne pouvais pas trouver des exemples)

Alors, je voulais demander des avis sur ce qui est la façon la plus « groovy » de gérer les ressources classpath? En outre, j'ai une liste de fichiers '* .xsd' sous et le répertoire 'xsd' dans mon pot. Y at-il de toute façon que je puisse faire quelque chose de similaire, mais avec des ressources classpath?

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) } 

Merci!

Répondre

0

Réponses à tour de rôle;

1:

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

Et 2:

Non, mais there's a library that makes it easy

+0

Merci Tim pour la réponse rapide! J'ai essayé d'afficher la solution avec laquelle je suis allé, mais j'ai dépassé la limite de carbonisation. Donc, je vais le poster comme une réponse. Pouvez-vous commenter mon approche par opposition à l'utilisation de réflexions? –

0

Merci @tim_yates pour la réponse rapide.

Depuis la bibliothèque, je vous écris est assez mince, je suis hésité à présenter une dépendance comme des réflexions au moment, donc pour l'instant je suis allé avec cette solution:

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

Je prendrai un coup d'oeil à des réflexions bientôt et voir comment je peux appliquer la même chose. En attendant, pourriez-vous commenter mon approche par rapport aux réflexions?

Merci!