J'ai un projet dans lequel je veux charger un modèle de vélocité pour le compléter avec des paramètres. L'application entière est empaquetée en tant que fichier jar. Ce que je pensais initialement faire était:Chargement d'un modèle de vélocité dans un fichier jar
VelocityEngine ve = new VelocityEngine();
URL url = this.getClass().getResource("/templates/");
File file = new File(url.getFile());
ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "file");
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, "true");
ve.init();
VelocityContext context = new VelocityContext();
if (properties != null) {
stringfyNulls(properties);
for (Map.Entry<String, Object> property : properties.entrySet()) {
context.put(property.getKey(), property.getValue());
}
}
final String templatePath = templateName + ".vm";
Template template = ve.getTemplate(templatePath, "UTF-8");
String outFileName = File.createTempFile("report", ".html").getAbsolutePath();
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(outFileName)));
template.merge(context, writer);
writer.flush();
writer.close();
Et cela fonctionne très bien quand je l'exécute en éclipse. Cependant, une fois que j'ai empaqueté le programme et essaye de l'exécuter en utilisant la ligne de commande j'obtiens une erreur parce que le dossier n'a pas pu être trouvé.
Je suppose que le problème est dans cette ligne:
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
Parce que dans un pot absolu du fichier n'existe pas, car il est à l'intérieur d'un zip, mais je ne pouvais pas encore trouver une meilleure façon de le faire .
Quelqu'un a des idées?
pour l'amour de Dieu, mettre en évidence le code dans votre message et cliquez sur le bouton de code afin qu'il soit correctement formaté! :) – vicatcu
Êtes-vous certain que le répertoire/templates/est exporté dans votre jar? Vous devez le marquer dans le cadre de vos paramètres de construction et d'autres choses. – vicatcu
ne savait pas sur le bouton de code, merci. Oui, le répertoire templates est dans le fichier jar. – Rafael