JavaFX 開発のための Gradle プロジェクトを作ろうと思い、それ用の Gradle プラグインを探したのですが、google code で開発されてるかと思いきや 1.x 時代の JavaFX 対応だったので、ちょいと自分で作ってみました。
JavaFX 2.0 から javac コマンドでコンパイルできるようになったとはいえ、実行可能 Jar ファイルを作成するには単にマニフェストファイルに Main-Class 属性を付加するだけではダメなようなので(前回参照)、ところどころ設定を行う必要があります。 ちなみに、環境変数 JAVAFX_HOME に JavaFX SDK のインストールフォルダ(へのパス)を設定しておいてください:
apply plugin:'java' defaultTasks 'test' //defaultTasks 'clean', 'build' // 設定項目↓↓↓ group = 'org.waman' // グループ名 & implementation-vendor version = 1.0 // アプリケーション・バージョン& implementation-version def jdkVersion = 1.7 def enc = 'UTF-8' def mainClass = 'org.sample.Main' // 実行可能 Jar ファイルのメインクラス // 設定項目↑↑↑ def javafxHome = System.getenv('JAVAFX_HOME') def antJavafxJar = 'build/classes/ant-javafx' sourceCompatibility = jdkVersion targetCompatibility = jdkVersion tasks.withType(Compile){ options.encoding = enc } // ***** Settings for dependencies ***** repositories { mavenCentral() } dependencies { compile files("$javafxHome/rt/lib/jfxrt.jar") // 1. JavaFX ライブラリの Jar ファイル testCompile 'junit:junit:4.10' } // ***** Settings for Executable Jar ***** jar { manifest { // 2. Jar のマニフェストを設定 attributes('Manifest-Version':1.0, 'JavaFX-Version':2.0, 'Main-Class':'com/javafx/main/Main', 'implemetation-vendor':group, 'implementation-title':name, 'implementation-version':version, 'JavaFX-Application-Class':mainClass) } from "$antJavafxJar/resources/classes" // 3. JavaFX アプリケーションに必要なクラス群 } // このタスクは「修正」の項目参照 task unjarAntJavafxJar << { if(!new File(antJavafxJar).exists()) ant.unjar(src:"$javafxHome/tools/ant-javafx.jar", dest:antJavafxJar) } jar.dependsOn unjarAntJavafxJar
JavaFX 用に行っている設定は
- dependencies に、コンパイル時に必要な jfxrt.jar を設定
- JavaFX の実行可能 Jar ファイル用にマニフェスト・ファイルの属性を設定*1
- JavaFX アプリケーションに必要なクラスを Jar に詰め込む
です。 これらの項目は変更する必要はありません。 各プロジェクトで変更する必要があるのはファイル前半の「設定項目」の部分だけです(JavaFX のバージョンなどが変わると変更の必要があるものもありますが)。 ちなみに IDE への対応はしていません。 署名などにも対応してません。
このビルドファイルで
gradle build
とビルドを行うと、
- $PROJECT_HOME/build/libs
フォルダ下に実行可能 Jar ファイルが生成されます。
修正
すいません、ちょっとまずいミスがあったのでビルドファイルを修正しました。 「3. JavaFX アプリケーションに必要なクラス群」で、JavaFX の実行可能 Jar ファイルに必要なクラス群を Jar に突っ込むようにしてましたが、ここで参照していたクラスファイルが、拙者が $JAVAFX_HOME/tools/ant-javafx.jar を手動で解凍して出来たファイルを参照してましたっ。 不覚。 修正後は ant-javafx.jar ファイルを unjar タスクによって「build/classes/ant-javafx」フォルダに展開するタスク unjarAntJavafxJar を付け加えてます。


