Mam projekt, w którym chcę załadować szablon prędkości, aby uzupełnić go o parametry. Cała aplikacja jest spakowana jako plik JAR. To, co początkowo myślałem o zrobieniu, to:Ładowanie szablonu prędkości wewnątrz pliku 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();
To działa dobrze, gdy uruchamiam go w czasie zaćmienia. Jednak po spakowaniu programu i próbie uruchomienia go przy użyciu wiersza poleceń pojawia się błąd, ponieważ nie można znaleźć pliku.
Wyobrażam sobie, że problem jest w tym wierszu:
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
Ponieważ w słoiku nie istnieje plik absolutna, ponieważ jest w środku na zamek, ale nie mogę jeszcze znaleźć lepszy sposób to zrobić .
Ktoś ma jakieś pomysły?
z miłości do Boga, podświetl kod w poście i kliknij przycisk kodu, aby poprawnie sformatować go! :) – vicatcu
Czy jesteś pewien, że katalog/templates/zostanie wyeksportowany do twojego słoika? Musisz oznaczyć go jako część ustawień kompilacji i innych rzeczy. – vicatcu
nie wiedział o przycisku kodu, dziękuję. Tak, katalog szablonów dostaje się do pliku JAR. – Rafael