我有一个Velocity模板 ValueTmpl.vm ,它不能被Velocity ResourceManager找到。一个最小的例子:
package generate;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
public class Generate {
public static void main(String[] args) throws Exception {
VelocityContext context = new VelocityContext();
context.put("key", "value");
Writer writer = new FileWriter(new File("Result.java"));
createTemplate("generate/templates/ValueTmpl.vm").merge(context, writer);
writer.close();
}
private static Template createTemplate(String vmTemplateFile) {
VelocityEngine ve = new VelocityEngine();
ve.setProperty(Velocity.RESOURCE_LOADER, "class");
ve.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
ve.init();
return ve.getTemplate(vmTemplateFile);
}
}
生成文件夹位于 src 目录的根目录中。我收到以下错误:
21.03.2011 13:09:01 org.apache.velocity.runtime.log.JdkLogChute log
SEVERE: ResourceManager : unable to find resource 'generate/templates/ValueTmpl.vm' in any resource loader.
Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'generate/templates/ValueTmpl.vm'
有人知道问题是什么吗?我应该在项目设置中更改某些内容吗?
提前致谢!
答案 0 :(得分:1)
我一直都遇到这种情况。
打开设置 - >编译器并将“?*。vm”添加到资源列表中。这样它就会被复制到你/你的目录中。确保.vm文件路径的根目录在项目中标记为source,类加载器应该找到它。
将/ generate文件夹从/ src下移出;把它放在与/ src相同的级别。在模块设置中将其标记为“源”,然后通过在“模板”处启动访问路径再次尝试。
答案 1 :(得分:0)
好的,现在它在删除与VelocityEngine相关的所有内容后起作用,所以它就像是
Template t0 = Velocity.getTemplate("src/generate/templates/ValueTmpl.vm");
t0.merge(context, writer);
感谢Jason Dusek。
答案 2 :(得分:0)
我知道很久以前就被问过了。但是我无法阻止自己发布,因为我花了很长时间才弄清楚是否有人想到了这个想法。
有了intellj的想法,velocity正试图在“Project”文件夹而不是“Module”类路径中找到模板文件。我很确定我可能缺少intellij想法中的一些配置,以使其查看模块类路径。不过,如果将速度模板复制到intelli idea项目文件夹,一切都会正常工作。
同意这是一个愚蠢的事情,但到目前为止还无法找到一种方法来配置intelij想法。任何人,任何指针?
答案 3 :(得分:0)
https://stackoverflow.com/a/38812523/8113460
我将.vm放在src/main/resources/templates
下,然后代码为:
Properties p = new Properties();
p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
Velocity.init( p );
VelocityContext context = new VelocityContext();
Template template = Velocity.getTemplate("templates/my.vm");
这适用于网络项目。