Tôi có một dự án mà tôi muốn tải một mẫu vận tốc để hoàn thành nó với các tham số. Toàn bộ ứng dụng được đóng gói dưới dạng tệp jar. Điều tôi nghĩ ban đầu khi làm là:Tải mẫu vận tốc bên trong tệp 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();
Và điều này hoạt động tốt khi tôi chạy nó trong nhật thực. Tuy nhiên, một khi tôi gói chương trình và cố gắng chạy nó bằng cách sử dụng dòng lệnh tôi nhận được một lỗi bởi vì các tập tin không thể được tìm thấy.
Tôi tưởng tượng vấn đề là ở dòng này:
ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
Bởi vì trong một cái lọ các tập tin tuyệt đối không tồn tại, vì nó bên trong một zip, nhưng tôi vẫn chưa thể tìm ra cách tốt hơn để làm điều đó .
Có ai có ý tưởng nào không?
cho tình yêu của thần, làm nổi bật mã trong bài đăng của bạn và nhấp vào nút mã để định dạng của nó đúng cách! :) – vicatcu
Bạn có chắc chắn rằng thư mục/templates/đang được xuất vào bình của bạn không? Bạn phải đánh dấu nó là một phần của cài đặt và công cụ xây dựng của bạn. – vicatcu
không biết về nút mã, cảm ơn. Có, các mẫu dir đang nhận được vào tập tin jar. – Rafael