How to use Payara Micro Maven Plugin (ja)

先頃リリースされた Payara 172 はクラウドに焦点を当てた様々な新機能を提供しています。それら新機能の中に Payara Micro Maven Plugin があります。小さな機能ですが、Payara Micro で動作するアプリケーションを開発するのにとても便利です。

従来、Payara Micro 向けのアプリケーションを Payara Server なしで開発するのは難しいことでした。IDE が Payara Micro と連携しないためです。これが Payara Micro Maven Plugin を使用することによって改善されます。

1. Payara Micro Maven Plugin の準備

Payara Micro Maven Plugin の最新バージョンは 1.0.0-SNAPSHOT であり、まだ Maven central リポジトリーに収録されていません。従って、まずはソースコードを GitHub からチェックアウトしてビルドするところから始めます。

$ git clone https://github.com/payara/maven-plugins
$ cd maven-plugins/payara-micro-maven-plugins
$ mvn install

2. Payara Micro Maven Plugin の使い方

まずは Payara Micro Maven Plugin の GAV を示します。

KeyValue
groupId fish.payara.maven.plugins
artifactId payara-micro-maven-plugin
version 1.0.0-SNAPSHOT

Payara Micro Maven Plugin は 3 つのゴール、payara-micro:bundle, payara-micro:start and payara-micro:stop が定義されています。それぞれ以下の通りです。

GoalDescription
payara-micro:bundle Uber Jar を作成する
payara-micro:start アプリケーションを Payara Micro 上で実行する
payara-micro:stop アプリケーション (Payara Micro で実行中) を停止する。

pom.xml に最小限追記すべき事項は以下の通りです。

<build>
  <plugins>
    <!-- snip -->
    <plugin>
      <groupId>fish.payara.maven.plugins</groupId>
      <artifactId>payara-micro-maven-plugin</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </plugin>
    <!-- snip -->
  </plugins>
</build>

ただし、これにはいくつかの問題があります。

  • payara-micro:bundle の実行前に War ファイルを作成しておかなければなりません。War ファイルが存在しない状況で実行するとエラーになります。
  • payara-micro:start は既定では Uber Jar を実行しません。このゴールは Payara Micro の様々なオプションをサポートするため、Uber Jar には特化していないことによります。
  • 既定では、プラグインは Payara Micro 4.1.1.171 を使用します。ただし、このバージョンは Windows では全く動作しないというバグがあります (そのため公式アナウンス時には既に 4.1.1.171.0.1 となっていたのです)。

では、実質的な最小限の追記事項を以下に示します。

<build>
  <plugins>
    <!-- snip -->
    <plugin>
      <groupId>fish.payara.maven.plugins</groupId>
      <artifactId>payara-micro-maven-plugin</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <executions>
        <execution>
          <goals>
            <goal>bundle</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <payaraVersion>4.1.2.172</payaraVersion>
        <useUberJar>true</useUberJar>
      </configuration>
    </plugin>
    <!-- snip -->
  </plugins>
</build>

ゴール install 実行と併せて payara-micro:bundle も実行されます。そのため、アプリケーションのビルドから Uber Jar の作成までを 1 ステップ、`mvn install` だけで済みます (どうです、簡単でしょう?)。

実行後、おそらく project-name/target 下に 2 つのファイルが出来ていることでしょう。

  • application-name.war (e.g. helloweb-1.1.0.war)
  • application-name-microbundle.jar (e.g. helloweb-1.1.0-microbundle.jar)

2 番目のファイルが Uber Jar です。これを直接 CLI で実行しても、あるいは Maven プラグイン経由 (payara-micro:start および payara-micro:stop) で実行しても構いません。Maven プラグインを使用することで任意の IDE と連携させることが出来ます。そのため、Payara Server の助けを借りなくても Payara Micro 向けのアプリケーションを容易に開発できるようになりました。

3. まとめ

Payara Micro を使うのはとても簡単です。現在ではさらに Payara Micro Maven Plugin の登場により、任意の IDE と連携させることができるようになっています。

詳細については Payara Micro Maven Plugin のページ をご覧ください。

4. おまけ

この記事を書くに当たって、私はサンプルアプリケーションとして https://github.com/khasunuma/helloweb/ を使用しました。これをビルドおよび実行すると、IDE のコンソールに以下のようなログが出力されます。

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building helloweb 1.1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- payara-micro-maven-plugin:1.0.0-SNAPSHOT:start (default-cli) @ helloweb ---
[INFO] Starting payara-micro from path: C:\Users\Kenji\workspace\helloweb\target/helloweb-1.1.0-microbundle.jar
(snip)
[2017-06-15T21:43:17.604+0900] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1497530597604] [levelValue: 800] 
Instance Configuration
Host: lysithea.voyager.coppermine.jp
HTTP Port(s): 8080 
HTTPS Port(s): 
Instance Name: Aggressive-Batfish
Instance Group: MicroShoal
Hazelcast Member UUID 1fb214f2-ac78-454e-a52c-81faf0d4f8b3
Deployed: helloweb-1.1.0 ( helloweb-1.1.0 war /helloweb-1.1.0 )



[2017-06-15T21:43:17.606+0900] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1497530597606] [levelValue: 800] 
Payara Micro URLs
http://lysithea.voyager.coppermine.jp:8080/helloweb-1.1.0

'helloweb-1.1.0' REST Endpoints
GET	/helloweb-1.1.0/api/hello
GET	/helloweb-1.1.0/api/hello



[2017-06-15T21:43:17.606+0900] [] [INFO] [] [PayaraMicro] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1497530597606] [levelValue: 800] Payara Micro  4.1.2.172 #badassmicrofish (build 235) ready in 12,255 (ms)

Payara Micro 172 以降では、アプリケーションの URLs と REST エンドポイントがログの最後に出力されるようになりました。これでもうパスを間違えずに済みますね。