menu
書いてる野郎
orebike@gmail.com
S2JDB-Genは便利なのだがイラッとくるところもある。変更してないのに更新される生成時刻の記述とか・・・
のような簡単にカスタマイズしたい場合のやりかた
通常S2JDBC-Genで使われるテンプレートはs2jdbc-gen-2.4.45-sources.jar
の中に格納されている。
なのでまずこいつを解凍する。
解凍したら
org/seasar/extension/jdbc/gen/internal/generator/tempaltes
のディレクトリを覗いてみる。ここにjavaとsqlというフォルダがあって。それぞれ生成されるテンプレートが格納されている。
今回は名前集合クラスの更新時刻の挿入をやめるというカスタマイズをしようと思うので該当のファイル
を取ってくる。
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.xml
のgen-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