title: Loading velocity template inside a jar file
body: <p>I have a project where I want to load a velocity template to complete it with parameters. The whole application is packaged as a jar file. What I initially thought of doing was this:</p>
  
  <pre><code>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&lt;String, Object&gt; 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();
  </code></pre>
  
  <p>And this works fine when I run it in eclipse. However, once I package the program and try to run it using the command line I get an error because the file could not be found.</p>
  
  <p>I imagine the problem is in this line:</p>
  
  <pre><code>ve.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, file.getAbsolutePath());
  </code></pre>
  
  <p>Because in a jar the absolute file does not exist, since it's inside a zip, but I couldn't yet find a better way to do it.</p>
  
  <p>Anyone has any ideas?</p>