s2jdbc-genはantのタスクが用意されていて,DoltengでSAStruts/S2JDBCのプロジェクトを作成するとs2jdbc-gen-build.xmlが作成されます.しかし,pom.xmlでmaven-eclipse-plugin形式のプロジェクトに変更してしまうと,クラスパスの問題でそのままではs2jdbc-gen-build.xmlが実行できなくなります.
まぁ,ちまちまM2_REPOのクラスパスをs2jdbc-gen-build.xmlに1個1個定義してあげればなんとかなりますが,pom.xmlのdependencyのversionなどが変更になった場合都度修正するのが面倒なんで,maven-antrun-pluginを使いますです.以下のようなplugin設定を施せばスキーマからエンティティやサービスクラスを生成することができます.antにmaven.runtime.classpathを渡してあげるのがみそですね.ただ,compileフェーズで毎回実行されてしまうので,独自のフェーズを定義してあげたほうがよいかもしれません.そのあたり私もMaven2を理解しきっていないので何かよい方法があれば教えてくださいw
そもそもMaven2のプラグインとして実装したほうがよいかもしれませんが,とりあえずお手軽に実行できる手段として作ってみました.
<build> ... <plugins> ... <plugin> <artifactId>maven-antrun-plugin</artifactId> <dependencies> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> </dependencies> <executions> <execution> <id>gen-entity</id> <phase>compile</phase> <configuration> <tasks> <property name="classpathdir" value="target/classes" /> <property name="rootpackagename" value="hogehoge" /> <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" /> <taskdef resource="s2jdbc-gen-task.properties" classpathref="maven.runtime.classpath"> </taskdef> <gen-entity rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="maven.runtime.classpath"> </gen-entity> <javac srcdir="${javafiledestdir}" destdir="${classpathdir}" encoding="${javafileencoding}" fork="true" debug="on" classpathref="maven.runtime.classpath"> <include name="${rootpackagename}/${entitypackagename}/**" /> </javac> <gen-test classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${testjavafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="maven.runtime.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="maven.runtime.classpath" /> <gen-service classpathdir="${classpathdir}" rootpackagename="${rootpackagename}" entitypackagename="${entitypackagename}" javafiledestdir="${javafiledestdir}" javafileencoding="${javafileencoding}" env="${env}" jdbcmanagername="${jdbcmanagername}" classpathref="maven.runtime.classpath" /> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> ... </plugins> ... </build> <dependencies> ... <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2jdbc-gen</artifactId> <version>0.9.1</version> </dependency> ... <dependencies>
※ウェブアプリプロジェクトの場合はclasspathdirをsrc/main/webapp/WEB-INF/classesなど適切な場所にしてください.