- Contents -
Gradle Application プラグインとは
Java のランタイム(JRE)さえインストールされていれば、
Windows, Mac, Linux でも実行できる形で、プロジェクトを配布可能なパッケージにしてくれるプラグインです。
distribution
./gradlew installDist
とすることで、出力先(デフォルトでbuild/installディレクトリ)に配布パッケージを生成してくれます。
./gradlew distZip
で、Zipにして出力する事も可能。
e.g.)
build/install
└── myapp
├── bin
│ ├── myapp ... shellscript
│ └── myapp.bat ... batファイル
└── lib
├── ant-1.9.4.jar
├── ant-launcher-1.9.4.jar
├── groovy-all-2.4.14.jar
├── reactive-streams-1.0.1.jar
├── rxjava-2.1.6.jar
└── myapp.jar
bin
出力されたディレクトリに含まれるbinディレクトリには、
Windows用に、batファイル
Mac, Linux用に、shellscriptファイル が用意されています。
このスクリプトファイルは、
コンパイルしたClassファイルにPathを通して
予め指定しておいたメインクラスが実行されるように、javaコマンドが最終的に実行されます。
lib
libディレクトリには、コンパイルされたjarファイル郡が入ります。
依存するライブラリ、プロジェクト自体の成果物が含まれており。
javaコマンド実行時に、ここにpathが通った状態で実行されます。
配布先での実行方法
windowsであれば、配布されたbatファイルをダブルクリックするだけで実行できるでしょう。
または、コマンドプロンプトなどから、実行すればOKです。
Mac,Linuxの場合は、もちろん shellから実行させます。
./path/to/bin/myapp
カレントディレクトリが、
binディレクトリの状態でなくても一応動作させる事ができます。
./gradlew run
開発者が実行する場合は、./gradlew run
だけで実行させる事ができます。
覚えておいた方がいい設定
build.gradleに指定するapplicationプラグイン用の設定を覚えておきましょう。
mainClassName
実行する際に、mainとなるクラスを指定する必要があります。
public static main(String[] args)
のメソッドがあるクラスですね。
mainClassName = "org.sample.MyClass"
applicationDefaultJvmArgs
アプリケーション実行時のJVMに渡す引数を指定できます。
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx512m"]
使用メモリなど予め指定しておく事ができます。
ここで指定したオプションは、実行時のshellスクリプトに以下のように指定されます。
# Add default JVM options here. You can also use JAVA_OPTS and TEMPLATE_GROOVY_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xms512m" "-Xmx512m"'
JAVA_OPTS 環境変数
JAVA_OPTS 環境変数を使えば、shellスクリプトの実行時に追加でjvmArgsを指定する事ができます。
shellスクリプトの実装をみてみると、
DEFAULT_JVM_OPTSの後ろにJAVA_OPTS 環境変数が追加されて実行される事がわかるでしょう。
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $TEMPLATE_GROOVY_OPTS -classpath "\"$CLASSPATH\"" sample1 "$APP_ARGS"
exec "$JAVACMD" "$@"
# JAVA_OPTSで追加のjvmArgsを指定可能
JAVA_OPTS="-Dhoge=piyo" ./myapp/bin/myapp
src/dist
src/dist ディレクトリに配置したディレクトリ、ファイルは自動でパッケージング対象になります。
例えば、src/dist/etc/hoge.txt というものを配置していたとすると、
build/install/myapp/etc/hoge.txt という形でパッケージングされます。
README.txtや、classファイル以外のスクリプト等も含める事ができるでしょう。
applicationName
アプリケーション名を指定する事ができます。
実行させるshellスクリプトの名称や、パッケージしたディレクトリ名称に利用されます。
applicationName = "MyApp"
おしまい
開発者のみで使用されるようなものは、
JDKがインストールされている事でしょうから、
GradleのJavaExecタスクを使う方が融通が利くので良いでしょう。
開発者以外の人に使ってもらう想定のものであれば。
このApplicationプラグインを使う事で、
JREしかない環境で、batファイル、または、shellscriptファイルと一緒に配布することが可能になります。