【S2JDBC-Gen】Mavenで実行する方法の紹介

今回は、「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}は、プロジェクトのフォルダを取得するためプロパティ情報になります。
  • inheritRefs
    • 「Apache Maven」で使用できるプロパティ情報を、「Apache Ant」でも参照できるようにするための指定になります。

「configuration」タグに、「target」タグを使用して、「ant」タグを指定しています。

検証で使用する「Apache Maven AntRun Plugin」では、「task」タグが非推奨になっているためです。また、指定した場合は、処理を中断する動作になります。

tasks:Deprecated. Use target instead. For version 3.0.0, this parameter is only defined to break the build if you use it!

https://maven.apache.org/plugins/maven-antrun-plugin/run-mojo.html#tasks

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で実行するタスク定義の情報を取得するために指定します。詳細は、次のサイトを確認してください。

Seasar2 - S2JDBC-Gen - セットアップ

gen-entity

「<target name="gen-entity" depends="init">」では、gen-entityを実行するための情報を指定しています。dependsは、このタスクを実行するためには、initのタスクを実行する必要があるという依存関係になります。

gen-entityタスクに指定している、パラメータについては、次の公式サイトを確認してください。

Seasar2 - S2JDBC-Gen - Gen-Entity

gen-names

「<target name="gen-names" depends="init">」では、gen-namesを実行するための情報を指定しています。dependsは、このタスクを実行するためには、initのタスクを実行する必要があるという依存関係になります。

gen-namesタスクに指定しているパラメータについては、次の公式サイトを確認してください。

Seasar2 - S2JDBC-Gen - 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」の設定例と実行方法を紹介しました。