MavenでS2JDBC-Genを使う

S2JDBC-Genを使ってみました。S2JDBC-GenはエンティティのアノテーションからDDLを生成したり、RailsのMigrationのようにDDLを適用できたりと非常に便利です。ただ、S2JDBC-GenはAntタスクなので、Mavenプロジェクトの場合には、(Ant単体で実行しようとすると)クラスパスへのS2JDBCなどの依存ライブラリの追加が面倒です。
その場合には、Maven Antrun pluginを使ってMavenで管理されている依存ライブラリをAntのクラスパスに設定して実行する方法が便利です。ライブラリのバージョンなどもpom.xmlの記述が反映されるのでメンテナンスも楽です。MavenからS2JDBC-genを使う方法についての情報は結構充実しているのですが、私が試した方法をメモしておきます。

pom.xmlに依存ライブラリの追加

s2jdbc-genのdependencyを追加します。

<dependency>
    <groupId>org.seasar.container</groupId>
    <artifactId>s2jdbc-gen</artifactId>
    <version>2.4.**</version>
    <scope>compile</scope>
</dependency>

build.xmlの作成

以下のような内容でbuild.xmlを作成しました。とりあえずgen-ddlのみです。ファイル名はs2jdbc-gen-build.xmlとしました。

<?xml version="1.0" encoding="UTF-8"?>
<project>
	<taskdef resource="s2jdbc-gen-task.properties" classpath="${classpath}" />
	<property name="classpathdir" value="target/classes" />
	<property name="rootpackagename" value="com.azuki3.sample" />
	<target name="gen-ddl">
		<gen-ddl
			classpathdir="${classpathdir}"
			rootpackagename="${rootpackagename}"
			classpath="${classpath}"
			env="${env}"
			sqlKeywordCase="uppercase"
			sqlIdentifierCase="lowercase"
			dump="false" />
	</target>
</project>

${classpath}はmavenから渡されます。

pom.xmlにAntrun pluginの記述を追加

詳細は前のエントリに。

<plugin>
	<artifactId>maven-antrun-plugin</artifactId>
	<executions>
		<execution>
			<id>default-cli</id>
			<configuration>
				<tasks>
					<property name="classpath" refid="maven.compile.classpath" />
   					<ant antfile="s2jdbc-gen-build.xml"  target="${ant.target}" inheritRefs="true"></ant>
				</tasks>
			</configuration>
		</execution>
	</executions>
</plugin>

s2jdbc-genを実行する

コマンドラインから実行します。データベースに接続する場合には、S2JDBCを使用したアプリケーションと同様にjdbc.diconに記述された情報が使用されます。

mvn antrun:run -Dant.target=gen-ddl