Gradle applicationプラグインについて

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ファイルと一緒に配布することが可能になります。

コメントを残す