倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

JavaFX 開発のための Gradle プロジェクト

JavaFX 開発のための Gradle プロジェクトを作ろうと思い、それ用の Gradle プラグインを探したのですが、google code で開発されてるかと思いきや 1.x 時代の JavaFX 対応だったので、ちょいと自分で作ってみました。

JavaFX 2.0 から javac コマンドでコンパイルできるようになったとはいえ、実行可能 Jar ファイルを作成するには単にマニフェストファイルに Main-Class 属性を付加するだけではダメなようなので(前回参照)、ところどころ設定を行う必要があります。 ちなみに、環境変数 JAVAFX_HOMEJavaFX 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 用に行っている設定は

  1. dependencies に、コンパイル時に必要な jfxrt.jar を設定
  2. JavaFX の実行可能 Jar ファイル用にマニフェスト・ファイルの属性を設定*1
  3. 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 を付け加えてます。
プログラミングGROOVY Building and Testing With Gradle JavaFX 2.0: Introduction by Example

*1:mainClass フィールドに設定した内容は、Main-Class ではなく JavaFX-Application-Class に設定されます。