ポータブルな、APサーバー入りjarが最近好き。java -jar xxx.jar
で起動できるやつ。
Tomcat単品組み込みならspring-bootつかったり、tomcat7-maven-pluginで簡単に作れる。
Java EEでもできないかなと思ったが、Java EE 7のGlassFishやWildFlyだとできなさげ。
TomEEのMaven pluginならできそうだったので、TomEEを試してみた。
TomEEことはじめ
Maven Archetypeから雛形プロジェクト作成
$ mvn archetype:generate -DarchetypeGroupId=org.apache.openejb.maven -DarchetypeArtifactId=tomee-webapp-archetype
ビルド&ラン
$ mvn clean package tomee:run
http://localhost:8080 にアクセス
できた!
最新版を使用する
組み込みjarはtomee-maven-plugin 1.6.1(まだsnapshot)からサポートされている。そっちを使う場合は
$ mvn archetype:generate -DarchetypeGroupId=org.apache.openejb.maven -DarchetypeArtifactId=tomee-webapp-archetype -DarchetypeCatalog=http://repository.apache.org/content/groups/snapshots -DarchetypeVersion=1.6.1-SNAPSHOT
pom.xmlに以下を追加・・
<pluginRepositories>
<pluginRepository>
<id>apache-snapshot</id>
<name>Apache Snapshot Repository</name>
<url>https://repository.apache.org/content/groups/snapshots/</url>
</pluginRepository>
</pluginRepositories>
で
$ mvn package tomee:exec
を実行するとtarget/<artifactId>-<version>-exec.jar
ができる。
あとはjava -jar target/<artifactId>-<version>-exec.jar
で起動!
ポータブルだ!
(※ Windowsでmvn tomee:exec
して作ったjarだと起動できなかった・・)
デフォルトではJava EE 6のWeb Profileのアプリが作られる。
JAX-RSを追加したい場合は、<tomeeClassifier>
にjavars
を指定する。
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
<version>1.6.1-SNAPSHOT</version>
<configuration>
<context>ROOT</context>
<tomeeClassifier>jaxrs</tomeeClassifier>
</configuration>
</plugin>
JAX-WSやJMSも使いたい場合は、<tomeeClassifier>
にplus
を指定する。
<plugin>
<groupId>org.apache.openejb.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
<version>1.6.1-SNAPSHOT</version>
<configuration>
<context>ROOT</context>
<tomeeClassifier>plus</tomeeClassifier>
</configuration>
</plugin>
違いはこちらを参照。
TomEEならWebSocket(JSR-356)も使えると思うから、Java EE 7じゃなくても少しは我慢できるかも!?
これで少しはJava EEでアプリ作る気が出てきた。