0

我正在尝试启动并运行 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文件夹下的文件,但为了测试目的,把它放在同一个文件夹下)。

4

1 回答 1

3

好的,想通了。

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

<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/classespart后面提供路径即可。

velocityEngine.getTemplate("path/to/resource/MyTestTemplate.vm");

我确信有一些方法可以让模板脱离文件路径,但我不再关心了;)

于 2012-06-20T21:22:04.903 回答