Tengo un proyecto donde quiero cargar una plantilla de velocidad para completarla con los parámetros. Toda la aplicación está empaquetada como un archivo jar. Lo que inicialmente pensé hacer fue esto:Cargando la plantilla de velocidad dentro de un archivo 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();
Y esto funciona bien cuando lo ejecuto en eclipse. Sin embargo, una vez que empaqueté el programa e intenté ejecutarlo usando la línea de comando, recibí un error porque no se pudo encontrar el archivo.
Me imagino que el problema es en esta línea:
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
Debido a que en un frasco no existe el archivo absoluta, ya que es el interior de una postal, pero todavía no podía encontrar una mejor manera de hacerlo .
¿Alguien tiene alguna idea?
por el amor de dios, resalte el código en su publicación y haga clic en el botón de código para que esté formateado correctamente. :) – vicatcu
¿Está seguro de que el directorio/templates/se está exportando a su jar? Debes marcarlo como parte de tu configuración de compilación y demás. – vicatcu
desconocía el botón de código, gracias. Sí, el directorio de plantillas se está metiendo en el archivo jar. – Rafael