Eclipse + MavenでAWS Flow Framework for Javaの開発環境を作成する

Amazon SWF

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

タイトルにあるように、AWS Flow Framework for Javaの開発環境をEclipseとMavenで作成してみました。すでに同内容を扱っているエントリは以下などが存在するのですが、これらとは別に独自に行ってしまったこともあり、その時にポイントだと思った事を中心に書いていきたいと思います。

開発環境作成のポイントと手順

開発環境の作成をする際にポイントとなる点を以下に列挙します。

  • aws-java-sdk-flow-build-toolsのダウンロード
  • AspectJの設定
  • annotation processingの設定

これらについて手順を書いていきたいと思います。

aws-java-sdk-flow-build-toolsのダウンロード

aws-java-sdk-flow-build-toolsですがMavenのリポジトリには無いようです。なのでAWS SDK for Javaの中にあるjarを使用します。手順は以下のようになります。

  1. AWS SDK for Javaを公式ページよりダウンロードする。
  2. 解凍する。
  3. libフォルダ内にaws-java-sdk-flow-build-tools.jar-<バージョン番号>.jarを取得する。
  4. aws-java-sdk-flow-build-tools.jar-<バージョン番号>.jarを、Eclipseプロジェクトの任意の場所にコピーする。

AspectJの設定とpom.xml

AWS Flow Framework for JavaはAspectJを使用しています。この設定はMavenのpox.xmlで行いました。また上述のaws-java-sdk-flow-build-toolsも参照するようにpom.xmlに記述します。pom.xmlは以下のようになりました。

pom.xml
<project 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>AwsFlowFrameworkMaven</groupId>
    <artifactId>AwsFlowFrameworkMaven</artifactId>
    <version>0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>CHANGE</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <target.dir>target</target.dir><!-- Set versions. -->
        <aws.version>1.10.56</aws.version>
        <freemarker.version>2.3.21</freemarker.version>
        <aspectj-runtime.version>1.7.4</aspectj-runtime.version>
        <aspectj-maven-plugin.version>1.7</aspectj-maven-plugin.version>
        <compliance.level>1.7</compliance.level>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>${aws.version}</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-flow-build-tools</artifactId>
            <version>1.10.58</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/aws-java-sdk-flow-build-tools.jar-1.10.58.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectj-runtime.version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>1.16.6</version>
              <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
	        <plugins>
	            <plugin>
	                <groupId>com.mysema.maven</groupId>
	                <artifactId>apt-maven-plugin</artifactId>
	                <version>1.1.3</version>
	                <executions>
	                    <execution>
	                        <goals>
	                            <goal>process</goal>
	                        </goals>
	                        <configuration>
	                            <outputDirectory>target/generated-sources/annotations</outputDirectory>
	                            <processor>com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor</processor>
	                        </configuration>
	                    </execution>
	                </executions>
	                <dependencies>
	                    <dependency>
	                        <groupId>com.amazonaws</groupId>
	                        <artifactId>aws-java-sdk-flow-build-tools</artifactId>
	                        <version>${aws.version}</version>
	                    </dependency>
	                    <dependency>
	                        <groupId>org.freemarker</groupId>
	                        <artifactId>freemarker</artifactId>
	                        <version>${freemarker.version}</version>
	                    </dependency>
	                    <dependency>
	                        <groupId>org.apache.commons</groupId>
	                        <artifactId>commons-lang3</artifactId>
	                        <version>3.3.2</version>
	                    </dependency>
	                </dependencies>
	            </plugin>
	            <plugin>
	                <groupId>org.apache.maven.plugins</groupId>
	                <artifactId>maven-compiler-plugin</artifactId>
	                <version>2.5.1</version>
	                <configuration>
	                    <compilerArgument>-proc:none</compilerArgument>
	                    <source>${compliance.level}</source>
	                    <target>${compliance.level}</target>
	                </configuration>
	            </plugin>
	            <plugin>
	                <groupId>org.codehaus.mojo</groupId>
	                <artifactId>aspectj-maven-plugin</artifactId>
	                <version>${aspectj-maven-plugin.version}</version>
	                <dependencies>
	                    <dependency>
	                        <groupId>org.aspectj</groupId>
	                        <artifactId>aspectjtools</artifactId>
	                        <version>${aspectj-runtime.version}</version>
	                    </dependency>
	                </dependencies>
	                <configuration>
	                    <complianceLevel>${compliance.level}</complianceLevel>
	                    <showWeaveInfo>true</showWeaveInfo>
	                    <verbose>true</verbose>
	                    <source>${compliance.level}</source>
	                    <target>${compliance.level}</target>
	                    <aspectLibraries>
	                        <aspectLibrary>
	                            <groupId>com.amazonaws</groupId>
	                            <artifactId>aws-java-sdk</artifactId>
	                        </aspectLibrary>
	                    </aspectLibraries>
	                    <sources>
	                        <source>
	                            <basedir>${target.dir}/generated-sources/annotations</basedir>
	                        </source>
	                        <source>
	                            <basedir>src/main/java</basedir>
	                        </source>
	                    </sources>
	                </configuration>
	                <executions>
	                    <execution>
	                        <goals>
	                            <goal>compile</goal>
	                            <goal>test-compile</goal>
	                        </goals>
	                    </execution>
	                </executions>
	            </plugin>
	        </plugins>
        </pluginManagement>
    </build>
</project>

28行目でダウンロードしたaws-java-sdk-flow-build-toolsの参照を、aspect wavingを101行目以降で行っています。48行目ではlombokを使用するようにしていますが、これはlombokを使わないのであれば不要です。

annotation processingの設定

Eclipseのプロジェクトにannotation processingの設定を行います。公式ページのGetting Startにも方法は記載されていますが、以下のようにになります。

  1. プロジェクトを右クリックし、propertiesを押下
  2. 「Java Compiler」-「Annotation Processing」を選択
  3. 「Enable Annotation Processing」にチェックを入れ、OKを押下する

まとめ

以上で開発環境が整いました。Mavenを使用すると任意のライブラリを追加するときなどに便利かと思います。AWS Flow Framework for Javaを始める際の参考になれば幸いです。

参考サイト

今回は以下のサイトを参考にさせて頂きました。ありがとうございました。
Using the AWS Flow Java framework with IntelliJ IDEA and Maven
Setting up AWS Flow Framework for Java with the AWS Toolkit for Eclipse