タグ「Maven」が付けられているもの

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 エンドポイントがログの最後に出力されるようになりました。これでもうパスを間違えずに済みますね。

How to use Payara Micro Maven Plugin (en)

Payara 172 has various new features that are highly cloud-focused. A part of them, Payara Micro Maven Plugin is provided. It's a small but useful tools to develop applications running on Payara Micro.

Previously, there is a problem that it's difficult to develop applications for Payara Micro without Payara Server because no IDEs support Payara Micro directly. Now it has solved to use Payara Micro Maven Plugin.

1. Preparing Payara Micro Maven Plugin

Latest version of Payara Micro Maven Plugin is 1.0.0-SNAPSHOT, thus it's not on Maven central repository. At first we check out from GitHub and build it.

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

2. Using Payara Micro Maven Plugin

Here is GAV of Payara Micro Maven Plugin.

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

Payara Micro Maven Plugin has three goals; payara-micro:bundle, payara-micro:start and payara-micro:stop.

GoalDescription
payara-micro:bundle Create Uber Jar
payara-micro:start Start the application on Payara Micro
payara-micro:stop Stop the application on Payara Micro

Then minimal description on pom.xml is here:

<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>

But minimal description has some problems.

  • We have to create a War file before run payara-micro:bundle. The goal assumes the War file exists.
  • Goal payara-micro:start doesn't use Uber Jar in default. The goal supports various option of Payara Micro, thus it's not specified to Uber Jar.
  • In default, this plugin uses Payara Micro 4.1.1.171. Unfortunately, this version cannot run on Windows platform because of its bug. (Therefore Payara Micro 4.1.1.171.0.1 was released instead of it.)

Then, I show effectively minimal description as follows:

<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>

This runs goal payara-micro:bundle with goal install. So that we may do only one step `mvn install` to build an application and create Uber Jar. (I think it's very useful, don't you?)

After the goal, it seems that there are two files in project-name/target.

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

The second is Uber Jar. We may run it either on CLI directly or via the plugin's goals; payara-micro:start and payara-micro:stop. The way to use the plugin can be integrated with any IDEs, so we're able to develop applications for Payara Micro easily even if we don't use Payara Server.

3. Conclusion

To use Payara Micro is very easy. Now Payara Micro is integrated with any IDEs by using Payara Micro Maven Plugin.

If you want to know more information, see Payara Micro Maven Plugin's page.

4. Appendix

To write this article, I use https://github.com/khasunuma/helloweb/ as a sample application. And build and run it using the plugin, it's logging in the console of my IDE as follows:

[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 or later, it shows URLs and REST Endpoints in the end of starting log. So we're able to obtain the paths definitely.

セキュリティの都合などでアクセス制限が厳しい環境では、Eclipse の Maven 連携が動作しない場合があります。そのような時に試してみる価値のある手順をまとめます。いずれの手順も実施後に Maven プロジェクトを更新する必要があります。

1. Eclipse のプロキシ設定を "Manual" にする

プロキシ環境下では、Maven の settings.xml にプロキシ接続情報を記述するだけでは効かない場合があるため、Window > Preferences > General > Network で Active Provider を "Manual" にして、プロキシの接続情報を直接指定します。特にプロキシサーバが BASIC 認証を要求するような環境では、これが唯一のプロキシ設定方法となります。

もし、プロキシ自動構成 (PAC) スクリプト等を利用していてプロキシサーバのアドレス等が分からない場合は、HTTP クライアントで PAC スクリプトの URL を指定してスクリプト本体を取得し、そこからアドレスとポート番号を解析します。

2. Maven 依存関係をすべてダウンロードする

mvn コマンドを使って依存関係にあるモジュールやプラグインをすべてダウンロードします。

mvn dependency:go-offline -Dmaven.repo.local=%USERPROFILE%\.m2\repository

上記の例は Windows 環境の場合ですが、他の OS であってもパスの調整で実行可能と思われます。また、Eclipse からも同様のコマンドは実行可能です。

3. eclipse.ini を調整する

Eclipse は JVM オプションを eclipse.ini に持っているので、そこに記述を追加してみます。例えば、-Dosgi.requiredJavaVersion の下辺りに下記を加えて再起動します。

-Djava.net.useSystemProxies=true

4. 一度ビルドしてみる

試しにビルドしてみます。コマンドラインの mvn install --DskipTests=true、Eclipse の Run > Maven install を両方試してみると良いかもしれません。

5. それでも上手くいかない場合は?

その環境での開発は諦めましょう。