概要
S2JDBC-Genのセットアップの前にS2JDBCのセットアップ をしてください。
S2JDBC-Genの動作にはSeasar2、FreeMarkerが必要です。 S2JDBC-Gen-x.x.x.zipを解凍し、S2JDBC-Genのjarファイル(s2jdbc-gen-core-x.x.x.jar)とFreeMarkerのjarファイル(freemarker-2.3.x.jar)を任意の場所に配置してください。 S2JDBC-GenのAntタスクをコマンドラインから動作させる場合は、Apache Ant のインストールが別途必要です。
ビルドファイルの準備
S2JDBC-GenのAntタスクを実行するにはAntのビルドファイルが必要です。 典型的なビルドファイルは次のようになります。
<project name="sample" default="gen-ddl" basedir="."> <path id="classpath"> <pathelement location="build/classes"/> <fileset dir="lib"/> </path> <taskdef resource="s2jdbc-gen-task.properties" classpathref="classpath"/> <target name="gen-entity"> <gen-entity rootpackagename="examples" classpathref="classpath" /> </target> <target name="gen-ddl"> <gen-ddl classpathdir="build/classes" rootpackagename="examples" classpathref="classpath" /> </target> <target name="migrate"> <migrate classpathdir="build/classes" rootpackagename="examples" classpathref="classpath" /> </target> </project>
解説:クラスパスの設定
S2JDBC-GenのAntタスクの多くは、実行時にエンティティクラスを参照します。 また、S2JDBCの動作に必要なjarファイルに加え、s2jdbc-gen-core-x.x.x.jarとfreemarker-2.3.x.jarが必要です。 すべてのAntタスクからエンティティクラスやjarファイルを参照できるように、あらかじめクラスパスを設定しておきます。
<path id="classpath"> <pathelement location="build/classes"/> <fileset dir="lib"/> </path>
ここでは、"build/classes"がエンティティクラスを格納するディレクトリとします。 また、"lib"が必要なjarファイルを格納するディレクトリだとします。
解説:タスク定義の参照
S2JDBC-Genのタスク定義は、s2jdbc-gen-core-x.x.x.jar内のs2jdbc-gen-task.propertiesに含まれています。 これを参照するためのに<taskdef>の定義が必要です。
<taskdef resource="s2jdbc-gen-task.properties" classpathref="classpath"/>
classpathref属性でs2jdbc-gen-core-x.x.x.jarを含めたクラスパスを参照するようにします。
解説:タスクの記述
S2JDBC-Genのタスクを<target>要素の内側に記述します。
<target name="gen-entity"> <gen-entity rootpackagename="examples" classpathref="classpath" /> </target>
classpathref属性の指定を忘れないようにしてください。 S2JDBC-Genのタスク一覧や、タスクに記述できる属性についてはタスク を参照ください。
Antタスクの実行
以下、ビルドファイルの名前をs2jdbc-gen-build.xmlだとします。
コマンドラインからの実行
Antをコマンドラインから実行する場合は、ビルドファイルが存在する階層に移動し、次のコマンドを実行してください。
ant -f s2jdbc-gen-build.xml ターゲット名
Eclipseからの実行
AntをEclipse上で起動する場合は、s2jdbc-gen-build.xmlをAntエディタで開き、実行してください。
ただし、Windows上でEclipse 3.4を利用している場合は、Console EncodingにMS932を指定して実行する必要があります。
MS932を指定しない場合、ログがコンソールに正しく出力されません。
Console Encodingを指定して実行する手順は次のようになります。
- s2jdbc-gen-build.xmlをAntエディタで開きます。
- メニューから「Run」-「Extenal Tools」-「Extenal Tools Configurations...」を選択します。Extenal Tools Configurationsダイアログが開きます。
- 左側のメニューにある「Ant Build」という項目をダブルクリックし、s2jdbc-gen-build.xmlに対する設定を新規作成します。
- ダイアログの「Common」タブの「Console Encoding」にMS932を指定します。MS932がコンボボックスに表示されていない場合は一旦ワークスペースやプロジェクトのエンコーディングをMS932に変更すると登場するようになります。
- ダイアログの「Run」ボタンを押しAntを実行します。
実践的なビルドファイル
より実践的なビルドファイルは次のようなものになります。自由にカスタマイズしてご使用ください。 S2JDBC-Genが提供するAntタスクについてはタスク一覧 を参照ください。
<project name="example-s2jdbc-gen" default="gen-ddl" basedir="."> <property name="classpathdir" value="src/main/webapp/WEB-INF/classes"/> <property name="rootpackagename" value="example"/> <property name="entitypackagename" value="entity"/> <property name="javafiledestdir" value="src/main/java"/> <property name="testjavafiledestdir" value="src/test/java"/> <property name="javafileencoding" value="UTF-8"/> <property name="env" value="ut"/> <property name="jdbcmanagername" value="jdbcManager"/> <path id="classpath"> <pathelement location="${classpathdir}"/> <fileset dir="src/main/webapp/WEB-INF/lib"/> <fileset dir="lib"/> </path> <taskdef resource="s2jdbc-gen-task.properties" classpathref="classpath"/> <target name="gen-entity"> <gen-entity rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <javac srcdir="${javafiledestdir}" destdir="${classpathdir}" encoding="${javafileencoding}" fork="true" debug="on" classpathref="classpath"> <include name="${rootpackagename}/${entitypackagename}/**"/> </javac> <gen-test classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${testjavafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-condition classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-names classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-service classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> </target> <target name="gen-ddl"> <gen-ddl classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-test classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${testjavafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-condition classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-names classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> <gen-service classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> </target> <target name="migrate"> <migrate classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="classpath" /> </target> </project>