今回は、「S2JDBC-Gen」を「Apache Ant」ではなく「Apache Maven」で実行する方法を紹介していきます。
公式サイトのセットアップの方法には、「Apache Ant」を使用する設定方法、実行方法などは紹介されていますが、「Apache Maven」を使用する方法は記載されていません。
「Apache Maven」から「S2JDBC-Gen」を実行するため、「Apache Maven AntRun Plugin」を使用することで「Apache Ant」を実行することができるようになります。ここでは、次のタスクを実行するための設定方法、実行方法を紹介していきます。
- Gen-Entiy
- Gen-Names
検証環境
検証に使用した環境/ライブラリを次に記載します。
- Apache Maven
- バージョン:3.6.3
- Apache Maven Compiler Plugin
- バージョン:3.8.1
- Apache Maven AntRun Plugin
- バージョン:3.0.0
pom.xml
「pom.xml」は、「Apache Maven」で使用する設定ファイルになります。ファイル全体は、次のようになります。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>s2jdbc-gen</artifactId>
<version>0.0.1</version>
<packaging>war</packaging>
<name>example-s2jdbc-gen-maven</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>maven.seasar.org</id>
<name>The Seasar Foundation Maven2 Repository</name>
<url>http://maven.seasar.org/maven2</url>
</repository>
</repositories>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<testOutputDirectory>src/test/webapp/WEB-INF/test-classes</testOutputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>gen-entity</id>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-entity" />
</ant>
</target>
</configuration>
</execution>
<execution>
<id>gen-names</id>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-names" />
</ant>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.seasar.sastruts</groupId>
<artifactId>sa-struts</artifactId>
<version>1.0.4-sp9</version>
</dependency>
<dependency>
<groupId>org.seasar.container</groupId>
<artifactId>s2-framework</artifactId>
<version>2.4.48</version>
<exclusions>
<exclusion>
<groupId>jboss</groupId>
<artifactId>javassist</artifactId>
</exclusion>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seasar.container</groupId>
<artifactId>s2-extension</artifactId>
<version>2.4.48</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seasar.container</groupId>
<artifactId>s2-tiger</artifactId>
<version>2.4.48</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
<exclusion>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seasar.container</groupId>
<artifactId>s2jdbc-gen</artifactId>
<version>2.4.48</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ejb_3.0_spec</artifactId>
<version>1.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jpa_3.0_spec</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jta_1.1_spec</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-annotation_1.0_spec</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
repositoriesタグ
repositoriesタグには、「Maven Central Repository」から取得できないライブラリを取得するため、次のリポジトリを指定します。
...
<repositories>
<repository>
<id>maven.seasar.org</id>
<name>The Seasar Foundation Maven2 Repository</name>
<url>http://maven.seasar.org/maven2</url>
</repository>
</repositories>
...
未指定の場合は、「org.seasar.container」などのライブラリが取得できないため実行できなくなります。
pluginsタグ
pluginsタグには、使用するプラグインを指定します。
maven-compiler-plugin
「maven-compiler-plugin」は、コンパイルするために必要なプラグインになります。
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
...
maven-antrun-plugin
「maven-antrun-plugin」は、「Apache Ant」を実行するために必要なプラグインになります。
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>gen-entity</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-entity" />
</ant>
</target>
</configuration>
</execution>
<execution>
<id>gen-names</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-names" />
</ant>
</target>
</configuration>
</execution>
</executions>
</plugin>
...
antタグには、次の属性を指定します。
- antfile
- 実行するためのantファイルを指定します。
${basedir}
は、プロジェクトのフォルダを取得するためプロパティ情報になります。
- 実行するためのantファイルを指定します。
- inheritRefs
- 「Apache Maven」で使用できるプロパティ情報を、「Apache Ant」でも参照できるようにするための指定になります。
dependencies
dependenciesタグには、必要な依存関係ライブラリを指定しています。指定しているライブラリについては、「pom.xml」を確認してください。
s2jdbc-gen-build.xml
「s2jdbc-gen-build.xml」は、「Apache Ant」を使用するための設定ファイルになります。ファイル全体は、次のようになります。
<?xml version="1.0"?>
<project name="s2jdbc-gen">
<target name="init">
<property name="rootPackageName" value="com.example.sastruts" />
<property name="jdbcManagerName" value="jdbcManager" />
<property name="classpathDir" value="${project.build.outputDirectory}" />
<property name="classpath" refid="maven.compile.classpath"></property>
<taskdef resource="s2jdbc-gen-task.properties" classpath="${classpath}" />
</target>
<target name="gen-entity" depends="init">
<gen-entity rootPackageName="${rootPackageName}" jdbcManagerName="${jdbcManagerName}" classpath="${classpath}" />
</target>
<target name="gen-names" depends="init">
<gen-names classpathDir="${classpathDir}" rootPackageName="${rootPackageName}" generateNamesAggregateClass="false"
jdbcManagerName="${jdbcManagerName}" classpath="${classpath}" />
</target>
</project>
初期処理
「<target name="init">
」では、s2jdbc-genで使用するための情報を指定しています。
property
には、s2jdbc-genで各タスクが使用する情報を指定します。
taskdef
には、s2jdbc-genで実行するタスク定義の情報を取得するために指定します。詳細は、次のサイトを確認してください。
gen-entity
「<target name="gen-entity" depends="init">」では、gen-entityを実行するための情報を指定しています。dependsは、このタスクを実行するためには、initのタスクを実行する必要があるという依存関係になります。
gen-entityタスクに指定している、パラメータについては、次の公式サイトを確認してください。
gen-names
「<target name="gen-names" depends="init">」では、gen-namesを実行するための情報を指定しています。dependsは、このタスクを実行するためには、initのタスクを実行する必要があるという依存関係になります。
gen-namesタスクに指定しているパラメータについては、次の公式サイトを確認してください。
実行方法
「Apache Maven」から「Apache Ant」を実行する方法は、それぞれ次のようになります。
「gen-entity」の場合は、次のように実行します。
mvn antrun:run@gen-entity
「antrun:run」が、「Apache Ant」を実行するための指定になります。「@」以降の値がpom.xmlの「id」の値になります。pom.xmlに指定した、次の処理が実行されるようになります。
...
<execution>
<id>gen-entity</id>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-entity" />
</ant>
</target>
</configuration>
</execution>
...
「gen-names」の場合は、次のように実行します。
mvn compile antrun:run@gen-names
最初に「compile」を実行して、「gen-entity」で作成したファイルからクラスファイルを作成する必要があります。クラスファイルが作成されていない状態で実行すると、次のようなエラーが発生します。
[ERROR] Exception in thread "main" org.seasar.extension.jdbc.gen.exception.CommandFailedRuntimeException: [ES2JDBCGen0005]コマンド(org.seasar.extension.jdbc.gen.internal.command.GenerateNamesCommand)の実行に失敗しました。バージョンは S2JDBC-Gen 2.4.48 です。理由はorg.seasar.extension.jdbc.gen.internal.exception.EntityClassNotFoundRuntimeException: [ES2JDBCGen0014]対象となるエンティティクラスが1つも見つかりませんでした。クラスパスのディレクトリ(xxxx)、パッケージ名(com.example.sastruts.entity)、読み取り対象のエンティティ名のパターン(.*)、読み取り非対象のエンティティ名のパターン()が正しいか確認してください。
「antrun:run」が、「Apache Ant」を実行するための指定になります。「@」以降の値がpom.xmlの「id」の値になります。pom.xmlに指定した、次の処理が実行されるようになります。
...
<execution>
<id>gen-names</id>
<configuration>
<target>
<ant antfile="${basedir}/s2jdbc-gen-build.xml" inheritRefs="true">
<target name="gen-names" />
</ant>
</target>
</configuration>
</execution>
...
まとめ
「Apache Maven」の「Apache Ant」を実行するためのプラグインを使用して、「s2jdbc-gen」の設定例と実行方法を紹介しました。