13

Freemarker(または代替)をMavenプロジェクトへのテンプレートコードジェネレーターとしてどのように構成しますか?私はMavenを初めて使用するので、助けていただければ幸いです。

プロジェクトのテンプレートからコードを生成したいと思います。[a]

グーグルは自分で書くのではなく、Springで使用されているように見えるfreemarkerを見つけました。これは私にとって十分なリファレンスですが、まだ始めていないので、Mavenでうまく機能する他の提案もありがたいです。

このWebサイトでは、pom.xmlへの依存関係として追加する方法を説明しています。 このSOの質問は、生成されたソースがどこに行くべきかを教えてくれます。私が理解できないのは、それをすべて結び付ける方法です。そのため、生成されたソースをテンプレートから生成し、生成されたソースをコンパイル、テスト、jar、javadocなどの通常のソースのように使用します。 Maven内のJava用のテンプレートコードジェネレーターと役立つ可能性がありますか?

[a]ジェネリックスが通常の解決策であり、実際にそれらを使用していることはわかっていますが、コピー/貼り付けエラーを発生させることなく、原始的なケースに対処するためにテンプレートを使用する必要があります。これで私を信頼してください:-)

4

2 に答える 2

20

私はこの目的のためにMavenプラグインを作成しました。FreeMarkerプリプロセッサを使用しています。

pom.xmlからのフラグメントは、その使用法を強調しています。

<plugins>
    <plugin>
        <configuration>
            <cfgFile>src/test/resources/freemarker/config.fmpp</cfgFile>
            <outputDirectory>target/test/generated-sources/fmpp/</outputDirectory>
            <templateDirectory>src/test/resources/fmpp/</templateDirectory>
        </configuration>
        <groupId>com.googlecode.fmpp-maven-plugin</groupId>
        <artifactId>fmpp-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

ここで、cfgFileは、FMPPの構成ファイルを保持するパスです。(FreeMarkerで渡される特別なデータを使用していない場合は、空のファイルで十分です)templateDirectoryは、FreeMarkerテンプレートを保持する場所です。outputDirectoryは、出力ファイルを生成する場所です。

プラグインの使用法を強調した詳細なドキュメントを作成中であり、それに応じてプロジェクトのWebサイトを更新します。

于 2010-10-13T16:39:10.733 に答える
0

このジョブの別のプラグインは次のとおりです: https ://code.google.com/p/maven-replacer-plugin/

問題の元の説明から、Mavenアーキタイプ(別名プロジェクトテンプレート)の作成を検討する必要があるように思われます:http: //maven.apache.org/archetype/maven-archetype-plugin/

そして、方程式にいくつかのプロパティを追加したいようです:http: //maven.apache.org/archetype/maven-archetype-plugin/examples/create-with-property-file.html

Maven Archetype機能は、Apache Velocity(Freemarkerとほぼ同じ)を使用して置換を行う手段も提供します...しかし、私はまだそのビットを解決していません。

于 2015-08-20T16:00:29.957 に答える