1

Maven を使用して管理している小さなコマンド ライン ユーティリティ プロジェクトがあります。このユーティリティは、Velocity テンプレートにデータを入力し、結果を新しいファイルにダンプするための非常にシンプルなアプリです。私の問題は、Velocity テンプレートをどこに置くかです。それらを に配置するとsrc/test/resources/foo/bar/baz、テスト用のファイルとテスト中のクラスが配置されてmvn testいる に明確にあるにもかかわらず、参照されたテンプレートが見つからないため失敗します。テンプレートをプロジェクトの最上位ディレクトリに配置すると、テストはパスしますが、Maven プロジェクト構造に従っていないため、実際にパッケージ化された .jar ファイルが機能しないのではないかと思います。私は何が欠けていますか?target/classes/foo/bar/baz.class

アップデート:

テスト中のメソッド:

public final void mergeTemplate(final String templateFileName, final Writer writer) throws ResourceNotFoundException, ParseErrorException, MethodInvocationException, IOException, Exception {
    Velocity.init();
    Velocity.mergeTemplate(templateFileName, Charset.defaultCharset().name(), context(), writer);
}

試験方法

@Test
public void testMergeTemplate() throws Exception {
    final FooGenerator generator = new FooGenerator();
    final StringWriter writer = new StringWriter();
    generator.mergeTemplate("foo.yaml", writer);
    Assert.assertEquals("Something went horribly, horribly wrong.", EXPECTED_RESULT, writer.toString().trim());
}

私が配置してテストをパスさせることができる唯一の場所foo.yamlは、プロジェクトのルート ディレクトリ、つまり と のピアとしてsrcですtarget

4

5 に答える 5

2

TEMPLATE_ROOT は、次のようにプログラムで構成できます。

Properties props = new Properties();        
props.put("file.resource.loader.path", templateRootDir);

VelocityEngine engine = new VelocityEngine();
engine.init(props);
engine.evaluate(...);
于 2011-07-29T17:38:41.577 に答える
1

これらはメインの jar ファイルに含める必要があるため、src/main/resources/foo/bar/baz に配置する必要があります。

于 2009-01-12T12:02:12.173 に答える
0

したがって、次のようなものを使用する代わりに、

generator.mergeTemplate("foo.yaml", writer);

私は次のようなものを使用する必要があります

InputStream fooStream = getClass().getResourceAsStream("foo.yaml");
generator.mergeTemplate(fooStream, writer);
于 2009-01-21T20:18:10.923 に答える
0

デフォルトの FileResourceLoader の代わりに、ClasspathResourceLoader を使用するように Velocity を構成できます。

于 2009-02-02T22:40:42.517 に答える
0

I have tried Velocity.setProperty() to set the properties similar to what was said above by @Jin Kim and was able to run it.

VelocityEngine ve = new VelocityEngine();
ve.setProperty(RunTimeConstants.RESOURCE_LOADER,"file");
ve.setProperty("file.resource.loader.path",templaterootdir);

ve.init();
于 2014-07-17T06:39:33.043 に答える