我的代码如下。
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class");
ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
ve.init();
Template tempalte = ve.getTemplate("templates/email/test.vm");
我收到了以下错误。
org.apache.velocity.exception.ResourceNotFoundException:无法执行 查找资源' templates / email / test.vm'在 org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452) 在 org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335) 在 org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102).....
"模板"文件夹在我的src文件夹中。
如果我直接将速度模板文件放入src文件夹中 更新为"模板tempalte = ve.getTemplate(" test.vm");"它有效。
我正在使用Mac OS,Java 1.8,Eclipse Neon。
请帮我解决这个问题。
谢谢和问候, IsuruJ
答案 0 :(得分:2)
尝试设置以下变量并检查它是否有效
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "class,file");
ve.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.Log4JLogChute");
ve.setProperty("runtime.log.logsystem.log4j.logger", "VELLOGGER");
ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
ve.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");
您的速度文件应位于resources
文件夹
上面的方式我把它作为我的项目,如果不工作尝试这个
我相信你的文件夹结构如/src/main/java/com/xyz/email/velocity/.
ve.velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER,"classpath");
ve.velocityEngine.setProperty("classpath.resource.loader.class",ClasspathResourceLoader.class.getName())
答案 1 :(得分:1)
几个问题可能导致它
模板文件夹是速度的根,因此删除它可能有效
ve.getTemplate(" /email/test.vm");
大写的文件被Windows忽略为:文件夹无法找到电子邮件或文件Test.vm
如果用户不是所有者
答案 2 :(得分:0)
感谢您的时间。 这是一个ANT项目。错误地我无法编写脚本来将模板文件夹复制到WEB-INF / classes文件夹。那就是问题所在。 @ user7294900和@sopadpadman都是正确的。代码现在可以使用了。
非常抱歉给您带来不便。
最诚挚的问候, IsuruJ