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"/>

classes次に、Velocity がフォルダーを参照することを認識できるように、構成を更新する必要がありました。

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");

ファイルパスからテンプレートを取得する方法があると確信していますが、気にするのをやめました;)

于 2012-06-20T21:22:04.903 に答える