2015年11月09日

GradleからGlassFishにデプロイするためのプラグインをつくってみたよ

NetBeansつかってWebサイトつくってたんだけど、
Mavenでビルドしてると遅いよね!

なんか、MavenじゃなくてGradleっていうのを使うと、
インクリメンタルビルドっていうのができて速くなるみたい。

と言うわけで、Webサイト作るのに使ってみたんだけど、
GlassFishへのデプロイはデフォルトではサポートしていないみたい。
で、ないならプラグインで作れば良いよね!ってことでつくってみたよ。

☆☆☆準備編☆☆☆

build.gradleに下のように書けばok。

buildscript {
repositories {
maven { url "http://www.empressia.jp/maven/" }
}
dependencies {
classpath "jp.empressia:jp.empressia.gradle.plugin.glassfish:+";
}
}
apply plugin: "glassfish";

NetBeans使っている場合は、さらに下の1行を追加すると便利になるよ。

apply plugin: "glassfish.netbeans";

☆☆☆定義編☆☆☆

プラグインを適用すると、glassfishの設定をできるようになるよ。
netbeansの部分はglassfish.netbeansを適用したときだけね。
長いけど、別に、全部設定しなくても大丈夫。

glassfish {
// GlassFishの場所
homeDirectoryPath;
// GlassFishの起動に使用するJDKHomeの場所
JDKHomeDirectoryPath;
// ドメインのディレクトリ
domainsDirectoryPath;
// ドメイン名
domainName;
// 管理ポート
adminPort;
// deployでサーバーの開始を試みる時にデバッグにするかどうか
deployWithDebug;
// ビルドの時にデプロイするかどうか(デフォルトtrue)
deployOnBuild;
netbeans {
// NetBeansのサーバー設定の名前
serverName;
// NetBeansのJavaプラットフォーム設定の名前
JDKName;
// NetBeansのサーバー設定ファイル(/config/GlassFishEE6/Instances/.nbattrs)
configFilePath;
// NetBeansのVersion
version;
}
deploy {
// デプロイ用のクラスファイルの場所
String classesDirectoryPath;
// デプロイ用のリソースファイルの場所
String resourcesDirectoryPath;
// デプロイ用のWebPage系のファイルの場所
String webappDirectoryPath;
// デプロイ用のディレクトリ名
String directoryName;
// デプロイ用のコンテキストルート
String contextRoot;
}
}

☆☆☆設定サンプル編☆☆☆

netbeansを適用していないときは、GlassFishのホームディレクトリを設定してね。
gradle,propertiesあたりから設定しても良いかも。

glassfish {
homeDirectoryPath = "C:\\Program Files\\glassfish-4.1\\glassfish";
}

JDKは放っておくとGradleのを使うから、指定したい場合は、↓の感じ。

glassfish {
homeDirectoryPath = "C:\\Program Files\\glassfish-4.1\\glassfish";
JDKHomeDirectoryPath = "C:\\Program Files\\Java\\jdk1.8.*_**";
}

でも、やっぱり設定めんどくさいよね!
と言うわけで、netbeansを適用しておけば、NetBeansの設定から勝手にGlassFish探すようにしてあるよ。
このときは何もしなくても全自動〜。

サーバーの設定を複数しているなら、設定したサーバーの名前を付ければ大丈夫!

glassfish {
netbeans {
serverName = "GlassFish Server 4.1";
}
}

簡単だね!
あ、古いNetBeansに設定がある場合は、versionを指定してね。

glassfish {
netbeans {
serverName = "GlassFish Server 4.1";
version = "8.0.1";
}
}

サーバーのJDK設定がデフォルトだと、Graldeのを使おうとするから注意してね。
こんな風にも設定できるけど、サーバーの設定をちゃんとした方が良いかな。

glassfish {
netbeans {
serverName = "GlassFish Server 4.1";
JDKName = "JDK 1.8";
}
}

☆☆☆実行編☆☆☆

glassfishプラグインを適用すると、5つのタスクが追加されるよ。

  • deployClasses
  • deployResources
  • deployWebapp
  • deployLibraries
  • deploy

他にも、いくつかのタスクが書き換わるよ。
clean、run、debugとか。

これで、↓の感じで行けるはず。

// サーバー停止(デプロイディレクトリ削除)
gradle clean
// サーバー起動
gradle run
// サーバーdebug起動
gradle debug
// デプロイ
gradle deploy

タスクの関係はだいたいこんな感じ。
EmpressiaGradleGlassFishPlugin_Tasks.png

NetBeans使ってるなら、ビルドボタン、クリーンビルドボタン、実行、デバッグボタンがあるから簡単に連動すると思うよ。
ただ、サーバーのログが見たかったら、サービスのサーバーを選んで、ドメイン・サーバー・ログの表示とかやってね。
あ、NetBeans閉じてもサーバー止まらないかも……まぁ、いいよね(゜▽、゜

☆☆☆注意編☆☆☆

なるべく、無駄にdeployコマンドが発行されないようにしているんだけど、
そのせいで、deployコマンド自体で失敗すると、次からデプロイされなくなる……かも?
そんなときは、コンパイルが動くようにプログラムを一回書き換えるとか、cleanするとかがいいかなぁ。

あと、MacとLinuxでの確認はしてないー。

Version 0.2.0は、Javaのソースがないと、
webappにWEB-INFディレクトリが作られなくてデプロイ失敗することがあるんだけど、
そういうことあんまり無いだろうし、すぐ直す予定〜。

posted by すふぃあ at 22:16| Comment(0) | TrackBack(0) | 雁字