maven

必要であれば、mavenのダウンロードとインストールを行って下さい。

archetype-pluginを使用する

  1. コマンドラインから以下を実行します
    1. mvn archetype:generate -DarchetypeCatalog=http://slim3.googlecode.com/svn/trunk/repository
  2. どのプロジェクトを作成するかを求められるので、slm3-archetype-quickstart を意味する "1" を入力します。注意)現在は選択肢が(1)以外ありません。
  3. 続けてgroupId, artifactId, version, packageの入力を求められるので適宜入力します。
  4. 最後に、入力した値の確認を求められるので、問題なければ "Y" を入力します。
  5. maven用のslim3プロジェクトが作成されます。
  6. 作成されたフォルダ(artifactIdで入力した名称です)に移動し、以下のコマンドを実行します。slim3のソースも添付したい場合は、以下のコマンドのパラメータに "-DdownloadSources=true"を指定してください。
    1. mvn eclipse:eclipse
  7. eclipseからプロジェクトをimportします。

eclipseからWebアプリケーションを起動する

  1. eclipseのパッケージエクスプローラからプロジェクトを右クリックし、「RunAS -> Web Application」を選択します。
  2. フォルダ選択ダイアログが表示されるので、プロジェクト直下のwarフォルダを選択します。
  3. AppEngineの開発サーバ上で起動され、localhost:8888 で確認できます。

eclipseからJUnitを起動する

  1. eclipseのパッケージエクスプローラからsrc/test/java/**/*.Testを右クリックし、「RunAs -> JUnit」を選択します。

mavenからtestを実行する

  1. コマンドプロンプトを開き、プロジェクトフォルダに移動します。
  2. 以下のコマンドを実行します。
    1. mvn test

archetype-pluginを使わない/eclipseと連動する必要がない場合

mavenを使ってslim3のAPTを含めてビルドするための最低限の設定です。

project/properties

pom内の複数の箇所で使用する、以下の値を定義しておきます。
  • slim3のバージョン
  • appengineのバージョン
  • APTによる出力フォルダ
<properties>
...
  <slim3.version>x.x.x</slim3.version>
  <appengine.version>1.3.2</appengine.version>
  <generated.src>target/apt_generated</generated.src>
</properties>

project/repositories

<repositories>
...
  <repository>
    <id>maven.seasar.org</id>
    <name>The Seasar Foundation Maven2 Repository</name>
    <url>dav:https://www.seasar.org/maven/maven2</url>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <releases>
      <updatePolicy>never</updatePolicy>
    </releases>
  </repository>
</repositories>

project/dependencies

<dependencies>
...
  <dependency>
    <groupId>org.slim3</groupId>
    <artifactId>slim3</artifactId>
    <version>${slim3.version}</version>
  </dependency>
  <dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>${appengine.version}</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-local-runtime</artifactId>
    <version>${appengine.version}</version>
    <scope>test</scope>
  </dependency>
</dependencies>

project/build/pluginManagement

<build>
...
  <pluginManagement>
    <plugins>
...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>apt-maven-plugin</artifactId>
        <version>1.0-alpha-3</version>
        <dependencies>
          <dependency>
            <groupId>org.slim3</groupId>
            <artifactId>slim3-gen</artifactId>
            <version>${slim3.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

project/build

<build>
...
  <plugins>
...
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>apt-maven-plugin</artifactId>
      <configuration>
        <encoding>utf-8</encoding>
        <outputDirectory>${generated.src}</outputDirectory>
      </configuration>
      <executions>
        <execution>
          <phase>process-sources</phase>
          <goals>
            <goal>process</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

archetype-pluginを使わない/eclipseと連動したい場合

WTPは使わない前提ですので、eclipse JEEでなくても大丈夫です。

project/properties

pom内の複数の箇所で使用する、以下の値を定義しておきます。

  • slim3のバージョン
  • appengineのバージョン
  • APTによる出力フォルダ
  • 開発サーバの作業フォルダ、デプロイの基準となるフォルダ
  • eclipse上でAPTを行うためのモジュールをコピーしておくフォルダ

    <properties>
    ...
      <slim3.version>x.x.x</slim3.version>
      <appengine.version>1.3.2</appengine.version>
      <generated.src>.apt_generated</generated.src>
      <generated.war>war</generated.war>
      <eclipse.lib>eclipse.lib</eclipse.lib>
    </properties>

    project/repositories

    <repositories>
    ...
      <repository>
        <id>maven.seasar.org</id>
        <name>The Seasar Foundation Maven2 Repository</name>
        <url>dav:https://www.seasar.org/maven/maven2</url>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
        <releases>
          <updatePolicy>never</updatePolicy>
        </releases>
      </repository>
    </repositories>

    project/dependencies

    <dependencies>
    ...
      <dependency>
        <groupId>org.slim3</groupId>
        <artifactId>slim3</artifactId>
        <version>${slim3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slim3</groupId>
        <artifactId>slim3-gen</artifactId>
        <version>${slim3.version}</version>
        <scope>provided</scope>
        <exclusions>
          <exclusion>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-stubs</artifactId>
        <version>${appengine.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-local-runtime</artifactId>
        <version>${appengine.version}</version>
        <scope>test</scope>
      </dependency>
    </dependencies>

    project/build/pluginManagement

    <pluginManagement>
    ...
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>1.4</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>apt-maven-plugin</artifactId>
          <version>1.0-alpha-3</version>
          <dependencies>
            <dependency>
              <groupId>org.slim3</groupId>
              <artifactId>slim3-gen</artifactId>
              <version>${slim3.version}</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
    </pluginManagement>

    project/build

    <build>
    ...
      <outputDirectory>${generated.war}/WEB-INF/classes</outputDirectory>
    ...
      <plugins>
    ...
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <executions>
            <execution>
              <phase>generate-sources</phase>
              <goals>
                <goal>add-source</goal>
              </goals>
              <configuration>
                <sources>
                  <source>${generated.src}</source>
                </sources>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>apt-maven-plugin</artifactId>
          <configuration>
            <encoding>utf-8</encoding>
            <outputDirectory>${generated.src}</outputDirectory>
          </configuration>
          <executions>
            <execution>
              <phase>process-sources</phase>
              <goals>
                <goal>process</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <executions>
            <execution>
              <id>copy-dependencies-for-webapp</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>copy-dependencies</goal>
              </goals>
              <configuration>
                <outputDirectory>${generated.war}/WEB-INF/lib</outputDirectory>
                <includeScope>runtime</includeScope>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
              </configuration>
            </execution>
            <execution>
              <id>copy-dependencies-for-apt</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>copy-dependencies</goal>
              </goals>
              <configuration>
                <outputDirectory>${eclipse.lib}</outputDirectory>
                <includeArtifactIds>slim3-gen</includeArtifactIds>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>true</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <configuration>
            <filesets>
              <fileset>
                <directory>${generated.war}/WEB-INF/lib</directory>
                <includes>
                  <include>**/*.jar</include>
                </includes>
              </fileset>
              <fileset>
                <directory>${generated.src}</directory>
                <includes>
                  <include>**/*.*</include>
                </includes>
              </fileset>
              <fileset>
                <directory>${eclipse.lib}</directory>
                <includes>
                  <include>slim3-gen-*.jar</include>
                </includes>
              </fileset>
            </filesets>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-eclipse-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>org.slim3:slim3-gen</exclude>
              <exclude>com.google.appengine:appengine-api-1.0-sdk</exclude>
              <exclude>com.google.appengine:appengine-api-labs</exclude>
            </excludes>
            <additionalProjectnatures>
              <projectnature>com.google.appengine.eclipse.core.gaeNature</projectnature>
              <projectnature>com.google.gdt.eclipse.core.webAppNature</projectnature>
            </additionalProjectnatures>
            <additionalBuildcommands>
              <buildcommand>com.google.gdt.eclipse.core.webAppProjectValidator</buildcommand>
              <buildcommand>com.google.appengine.eclipse.core.enhancerbuilder</buildcommand>
              <buildcommand>com.google.appengine.eclipse.core.projectValidator</buildcommand>
            </additionalBuildcommands>
            <classpathContainers>
              <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
              <classpathContainer>com.google.appengine.eclipse.core.GAE_CONTAINER</classpathContainer>
            </classpathContainers>
            <additionalConfig>
              <file>
                <name>.factorypath</name>
                <content>
                  <![CDATA[
    <factorypath>
      <factorypathentry kind="WKSPJAR" id="/${artifactId}/${eclipse.lib}/slim3-gen-${slim3.version}.jar" enabled="true" runInBatchMode="false"/>
    </factorypath>
                   ]]>
                </content>
              </file>
              <file>
                <name>.settings/org.eclipse.jdt.apt.core.prefs</name>
                <content>
                  <![CDATA[
    eclipse.preferences.version=1
    org.eclipse.jdt.apt.aptEnabled=true
    org.eclipse.jdt.apt.genSrcDir=${generated.src}
    org.eclipse.jdt.apt.reconcileEnabled=false
                   ]]>
                </content>
              </file>
            </additionalConfig>
          </configuration>
        </plugin>
      </plugins>
    </build>

    eclipseと連動をする手順

    1. 上記の定義をpom.xmlに追加する。
    2. $ mvn eclipse:eclipse を実行する
    3. eclipse側にClasspath変数を追加する
      1. Java-Build Path-Classpath Vairables を開いて M2_REPO 変数を追加
      2. 変数の値はmavenのローカルリポジトリのパスを設定する
        1. ローカルリポジトリのパスは、通常はホームディレクトリ配下の .m2/repostiory です。

    依存モジュールを追加したり、依存モジュールのバージョンを変更したりなどでpom.xmlを変更した際は、再度 mvn eclipse:eclipse を実行することでeclipse用のクラスパスの設定も再生成できます。

    Comments