У меня есть проект, в котором я хочу загрузить шаблон скорости, чтобы дополнить его параметрами. Все приложение упаковано в файл 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();
И это прекрасно работает, когда я запускаю его в затмении. Однако после того, как я упаковал программу и попытался запустить ее с помощью командной строки, я получаю сообщение об ошибке, так как файл не найден.
Я полагаю, проблема в этой строке:
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
Поскольку в банке абсолютный файл не существует, так как он находится внутри zip, но я пока не мог найти лучший способ сделать это.
У кого-нибудь есть идеи?