目的
前回の投稿で、GlassFish/Payara Embeddedとwarのパッケージング方法を検証した。今回は、さらにGlassFish/Payaraのdomainも含めてパッケージングし、配布用zipにするところまでを行う。
GlassFish/Payara Embeddedは、デフォルトではdomainをその都度テンポラリに生成し、使い捨てるようになっている。domainの設定を全てCommandRunner
を使ったコードに落とし込み、起動のたびに一から設定し直すことも可能だが、面倒だ。また、そもそもログインモジュールやJDBCドライバの追加は不可能である。
GlassFish/Payara Embeddedはdomainのディレクトリを指定して起動することができる。この機能を使えば、予め設定済みのdomainを用いることができる。ディレクトリの位置だけコード内で指定しておき、後からその位置にdomainを配置することも可能だが、ビルドのさいに自動的にdomainを含めるようにできたほうが便利だ。
さらに、domainや起動スクリプトや依存しているjar等をまとめてzipにパッケージングし、ビルドするだけで即配布可能な状態にする。
なお、今回の内容をまとめたサンプルプロジェクトをGitHubで公開している。
方法
前回の投稿と同じプロジェクト構成を用いる。
payara-embedded-sample
├── payara-emmbeded-sample-app
└── payara-emmbeded-sample-main
domainと起動スクリプトを構成する
Application Assembler Maven Pluginを使う。
- Application Assembler Maven Plugin http://www.mojohaus.org/appassembler/appassembler-maven-plugin/
このプラグインの主な目的は、依存ライブラリのリポジトリ化と、それら依存ライブラリのclasspathを設定した起動スクリプトを生成することである。classpath起動スクリプトにはそれに付随して、その他のファイル等をバンドルする機能もある。
まず、payara-emmbeded-sample-main
モジュールにdomainのディレクトリを追加し、以下のような構成にする。
payara-embedded-sample-main
└── src
└── main
├── config
│ └── domain
└── java
次にpom.xmlに以下を加える。
<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">
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<configurationDirectory>config</configurationDirectory>
<copyConfigurationDirectory>true</copyConfigurationDirectory>
<programs>
<program>
<mainClass>jp.mshackers.payara.embedded.sample.PayaraEmbedded</mainClass>
<id>embedded</id>
</program>
</programs>
</configuration>
</plugin>
...
</plugins>
...
</build>
...
</project>
これだけで、packageを走らせたときにconfig
ディレクトリのコピーと起動スクリプトの生成を行ってくれる。
zipにパッケージングする
Assembly Pluginを使うだけなので、特に目新しいところはない。前項に加え、payara-embedded-sample-main
モジュールを以下のように構成する。
payara-embedded-sample-main
└── src
└── main
├── assembly
│ └── bin.xml
├── config
└── java
bin.xml
にはAssembly Pluginの設定を書く。これはdescriptorと呼ばれる。今回は、特定のディレクトリをzipにパッケージングするだけなので、非常に単純。
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>${project.build.directory}/appassembler</directory>
</fileSet>
</fileSets>
</assembly>
次に、pom.xmlにAssembly Pluginの設定を書く。これも単純で、上記のdescriptorを設定するだけ。
<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">
...
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/bin.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>
...
</project>
実行環境
$ date
2015年 10月 4日 日曜日 20時55分48秒 JST
$ mvn --version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T20:57:37+09:00)
Maven home: /usr/local/Cellar/maven/3.3.3/libexec
Java version: 1.8.0_40, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.5", arch: "x86_64", family: "mac"
$ java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.5
BuildVersion: 14F27