[英]Velocity ResourceNotFoundException in IntelliJ IDEA
我有一个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);
}
}
generate文件夹位于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'
有人知道问题可能在哪里吗? 我应该在项目设置中更改某些内容吗?
提前致谢!
我一直都遇到这个问题。
打开设置->编译器,然后在资源列表中添加“?*。vm”。 这样,它将被复制到您的/ out目录中。 确保.vm文件路径的根在您的项目中被标记为源,并且类加载器应找到它。
将/ generate文件夹从/ src下移出; 将其放在与/ src相同的级别。 在模块设置中将其标记为“源”,然后通过在“模板”处启动访问路径来重试。
我知道它早就被问到了。 但是无法阻止自己发布,因为花了我相当长的时间才弄清楚intellij的想法是怎么回事。
用intellj的想法,Velocity正在尝试在“ Project”文件夹中而不是“ Module”类路径中找到模板文件。 我很确定我可能在intellij的想法上缺少一些配置,以使其进入模块类路径。 但是,如果您将速度模板复制到智能创意项目文件夹中,则一切正常。
同意那是一件愚蠢的事情,但是到目前为止,还没有找到一种否则配置intelij想法的方法。 任何人,任何指针?
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");
这适用于Web项目。
好的,在删除与VelocityEngine相关的所有内容后,它现在可以工作,所以就像
Template t0 = Velocity.getTemplate("src/generate/templates/ValueTmpl.vm");
t0.merge(context, writer);
感谢Jason Dusek 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.