我正在努力让Apache Velocity启动并运行。我的TestClass.class
包中有my.test.package
个班级。
public class TestClass {
public static Template getTestTemplate() throws Exception {
Velocity.init();
return Velocity.getTemplate("MyTestTemplate.vm");
}
}
在同一位置(my.test.package
),我有MyTestTemplate.vm
个文件。
上面的代码会引发异常,说Unable to find resource 'MyTestTemplate.vm'
。我不确定是什么问题。 Velocity不会在同一个包中查找文件吗? (注意:我最初将该文件放在resources文件夹中,但将其放在同一文件夹下以进行测试)。
答案 0 :(得分:3)
好的,想通了。
所以我想也许Velocity正在查看我的WEB-INF/classes
文件夹。我查看那里只是发现MyTestTemplate.vm
文件不在那里。结果我需要更新我复制资源的Ant脚本以包含.vm
个文件。
<include name="**/*.vm"/>
然后我需要更新我的配置,以便Velocity知道查看classes
文件夹。
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.setProperty("resource.loader", "class");
velocityEngine.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
velocityEngine.init();
然后,当您获得模板时,您只需要在WEB-INF/classes
部分之后提供路径。
velocityEngine.getTemplate("path/to/resource/MyTestTemplate.vm");
我确信有一些方法可以从文件路径中取出模板,但我不再关心;)