S2JDBC/S2JDB-Gen/生成されるコードのテンプレートをカスタマイズする

S2JDBC/S2JDB-Gen/生成されるコードのテンプレートをカスタマイズする

S2JDB-Genは便利なのだがイラッとくるところもある。変更してないのに更新される生成時刻の記述とか・・・

のような簡単にカスタマイズしたい場合のやりかた

元ネタのテンプレートファイルを用意

通常S2JDBC-Genで使われるテンプレートはs2jdbc-gen-2.4.45-sources.jarの中に格納されている。 なのでまずこいつを解凍する。

解凍したら

org/seasar/extension/jdbc/gen/internal/generator/tempaltes

のディレクトリを覗いてみる。ここにjavaとsqlというフォルダがあって。それぞれ生成されるテンプレートが格納されている。

今回は名前集合クラスの更新時刻の挿入をやめるというカスタマイズをしようと思うので該当のファイル

  • java/names-aggregate.ftl
  • java/names.ftl

を取ってくる。

http://s2container.seasar.org/2.4/ja/s2jdbc_gen/tasks/gen_names.html

今回SAStrutsでEclipseで開発しているとして、プロジェクトディレクトリ直下にtemplatesというディレクトリを新規に作る。 その中に↑の2つをコピーする

hoge
+--templates
   +--java
      +--names-aggregate.ftl
      +--names.ftl

こんな感じ

カスタマイズする

S2JDBCのテンプレートはFreeMakerというライブラリで作られていて、names-aggregate.ftlは↓のようになっている。

/**
 * 名前クラスの集約です。
 * 
<#if lib.author??>
 * @author ${lib.author}
</#if>
 */
@Generated(value = {<#list generatedInfoList as info>"${info}"<#if info_has_next>, </#if></#list>}, date = "${currentDate?datetime}")
public class ${shortClassName} {
<#list namesModelList as namesModel>

    /**
     * {@link ${namesModel.shortEntityClassName}}の名前クラスを返します。
     * 
     * @return ${namesModel.shortEntityClassName}の名前クラス
     */
    public static ${namesModel.shortInnerClassName} ${namesModel.shortEntityClassName?uncap_first}() {

コードの上部に生成時刻を挿入するような記述があるのでまるごと削ってしまおう。

<#if lib.author??>
 * @author ${lib.author}
</#if>
 */
@Generated(value = {<#list generatedInfoList as info>"${info}"<#if info_has_next>, </#if></#list>}, date = "${currentDate?datetime}")

のauthorとgeneratedの部分を削除する。names.ftlにも同様の操作をする。

これでテンプレートのカスタマイズはおしまい。

使用するテンプレートの場所を指定

テンプレートができたので、S2JDBC-Genにこのテンプレートの場所を教えにいかなければならない。 名前とディレクトリは元の構成をそのままそっくりコピーしているので根っこだけ教えればいいということ

今回は名前集合クラスの変更なのでそのタスクの部分に変更を加える。 s2jdbc-gen-build.xmlgen-namesのタスク部分に

    <gen-names
      classpathdir="${classpathdir}"
      rootpackagename="${rootpackagename}"
      entitypackagename="${entitypackagename}"
      javafiledestdir="${javafiledestdir}"
      javafileencoding="${javafileencoding}"
      env="${env}"
      jdbcmanagername="${jdbcmanagername}"
      classpathref="classpath"
      templatefileprimarydir="templates">
        <jvmarg value="${vmarg.encoding}"/>
    </gen-names>

↑のように

templatefileprimarydir="templates"

を追記する。これでgen-namesのタスクの時は自分で作ったtemplatesディレクトリ以下の記述が優先的に使われるようになる。 優先的なので、自分で作ってないテンプレートに関してはもとのディレクトリのテンプレートが使われる。

生成!

あとはgen-ddlをして生成時刻部分がなくなっていればOK

バージョン

  • 2012-08-25

タグ

s2/s2jdbc/s2jdbc_gen/custom_template.txt · 最終更新: 2017-09-26 19:17 by ore