21

アプリケーションでフリーマーカーテンプレートを使用しています

アプリケーションをjarファイルにデプロイする前に、テンプレートをロードするために必要なことは次のとおりです。cfg.setDirectoryForTemplateLoading(new File("templates"));

プロジェクト内に作成したテンプレートフォルダからすべてのテンプレートをロードしました。

ここで、Mavenに移動し、アプリケーションを実行可能jarにデプロイした後。アプリケーションはこのフォルダーを見つけることができません(.jarファイル内を確認しましたが、「templates」フォルダーはルートディレクトリに直接デプロイされています)

私は知っていることをすべて試しましたが、運がありませんでした。

今、すべてのテンプレートをどの程度正確にロードする必要がありますか?(フォルダーを.jarファイルの外に置いても、同じディレクトリに置いても機能すると思いますが、それは私が望んでいることではありません。)

ありがとう。

4

3 に答える 3

31

見て

void setClassForTemplateLoading(Class cl, String prefix);

...テンプレートの読み込みに関するFreeMarkerのマニュアルの章

例:

cfg.setClassForTemplateLoading(this.getClass(), "/templates");

...テンプレートがtemplates現在のクラスのルートに関連するパッケージにある場合。

于 2013-02-07T14:16:15.603 に答える
2
Configuration cfg;
private Template template;  
    {
        cfg=new Configuration(); 
        try {
            cfg.setClassForTemplateLoading(this.getClass(), "/templates");
            template = cfg.getTemplate("template.ftl");
}

これは私にとって完璧に機能しました。ここで、私のテンプレートフォルダにはsrc / main/resourcesパッケージの下にあるtemplate.ftlが含まれています。

于 2016-05-02T19:50:04.837 に答える
1

上記の代替案

cfg.setClassForTemplateLoading(this.getClass(), "/templates");

TemplateLoader ldr = new ClassTemplateLoader(classLoader, basePackagePath);
cfg.setTemplateLoader(ldr);

これは、ftlプロセッサが属するjar以外のjarからデータをロードする必要がある場合に役立ちます。

への呼び出しcfg.getTemplate(..)は、次の相対的なftlへのパスのみを必要とするため、おそらくより便利になります。basePackagePath

于 2017-08-25T06:38:54.077 に答える