2009-12-28 8 views
1

J'ai une application Velocity très simple qui fonctionne sur Linux et MacOS et qui échoue sous Windows. Le problème est avec les emplacements des ressources. Je lui donne simplement "/" pour lui permettre de reconnaître les chemins du système de fichiers, mais sur Windows qui ne fonctionne pas pour les chemins "c:/.....". Je soupçonne qu'il existe une solution plus simple à cela, mais quoi?Comment configurer Velocity pour trouver des modèles dans le système de fichiers sous Windows?

velocityEngine = new VelocityEngine(); 
    // we want to use absolute paths. 
    velocityEngine.setProperty("file.resource.loader.path", "/"); 
    try { 
     velocityEngine.init(); 
    } catch (Exception e) { 
     throw new MojoExecutionException("Unable to initialize velocity", e); 
    } 

Répondre

0

J'ai mis des modèles de vitesse dans le classpath et les ai lus avec Class.getResourceAsStream.

Il devrait aller quelque chose comme ceci:

// stuff.velocity is a file that lives directly under WEB-INF/classes 
// that contains the velocity template 
InputStream inputStream = Class.getResourceAsStream("/stuff.velocity"); 
String template = readTemplateFromFile(inputStream); 
VelocityContext context = new VelocityContext(); 
// insert any parameters into context now 
Writer writer = new StringWriter(); 
Velocity.evaluate(context, writer, "LOG", template); 

et maintenant écrivain devrait tenir le résultat de l'application des paramètres du modèle.

Le commentaire de Will Glass ci-dessous semble être une bonne chose à vérifier. Quand j'utilisais la vélocité, c'était pour générer des courriels de notification, il n'y en avait pas beaucoup et le travail était développé sur un fil séparé, donc la performance n'était pas un gros problème à ce moment-là.

+0

Comment configurez-vous le moteur pour faire cela, ou, peut-être, devrais-je demander, quelle est la syntaxe du chemin qui le fait faire cela? – bmargulies

+0

J'espère que mes modifications clarifieront cela. –

+1

L'utilisation de Velocity.evaluate() est un bug de performance car il ne supporte pas le mécanisme de cache de Velocity. Si vous placez les modèles dans le classpath, utilisez ClasspathResourceLoader. Pour les emplacements de fichiers arbitraires, utilisez un FileResourceLoader. –