2012-06-20 91 views
0

我正在尝试启动并运行Apache Velocity。我的my.test.package包中有一个TestClass.class类。速度未找到模板

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是否不在相同的包中查找文件? (注意:我最初在资源文件夹中有该文件,但为了测试目的将其放在相同的文件夹下)。

回答

3

好的,想通了。

所以我想,也许Velocity正在看我的WEB-INF/classes文件夹。我在那里看了一下才发现MyTestTemplate.vm文件不在那里。原来,我需要更新我的Ant脚本,该脚本复制了资源以包含.vm文件。

<include name="**/*.vm"/> 

然后我需要更新我的配置,这样速度就知道在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"); 

我肯定有办法让模板过的文件路径,但我不再关心;)

+0

感谢我这两条线丢失: velocityEngine.setProperty(“resource.loader “,”class“); velocityEngine.setProperty(“class.resource.loader.class”,“org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader”); – chrisr