GroovyFXのデモをgradleを使って起動ができない・・・

GroovyFXのデモを動かすところまでを1から説明する
GroovyFXのデモをgradleを使って動かすところまでを説明するつもりだったが、
gradleを使って実行できない・・・


@kazuchikaによるGroovyFXの資料

デモの一覧を表示する

[D:\workspace_other\groovyfx\trunk\groovyfx]gradle tasks
:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build tasks
-----------
assemble - Assembles all Jar, War, Zip, and Tar archives.
build - Assembles and tests this project.
buildDependents - Assembles and tests this project and all projects that depend on it.
buildNeeded - Assembles and tests this project and all projects it depends on.
classes - Assembles the main classes.
clean - Deletes the build directory.
demoClasses - Assembles the demo classes.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles the test classes.

Demo tasks
----------
AccordionDemo - Run the AccordionDemo program
AnalogClockDemo - Run the AnalogClockDemo program
AnchorDemo - Run the AnchorDemo program
AnimationDemo - Run the AnimationDemo program
BindDemo - Run the BindDemo program
BlendEffectDemo - Run the BlendEffectDemo program
BorderPaneDemo - Run the BorderPaneDemo program
ChartDemo - Run the ChartDemo program
ChoiceBoxDemo - Run the ChoiceBoxDemo program
ColorfulCirclesDemo - Run the ColorfulCirclesDemo program
EffectsDemo - Run the EffectsDemo program
FadeTransitionDemo - Run the FadeTransitionDemo program
FileChooserDemo - Run the FileChooserDemo program
FillAndStrokeDemo - Run the FillAndStrokeDemo program
FillTransitionDemo - Run the FillTransitionDemo program
FXBindableDemo - Run the FXBindableDemo program
FXMLDemo - Run the FXMLDemo program
GradientDemo - Run the GradientDemo program
GridPaneDemo - Run the GridPaneDemo program
GroovyFXDemo - Run the GroovyFXDemo program
HTMLEditorDemo - Run the HTMLEditorDemo program
ImageDemo - Run the ImageDemo program
LightingEffectDemo - Run the LightingEffectDemo program
MediaViewDemo - Run the MediaViewDemo program
MenuDemo - Run the MenuDemo program
PaddingDemo - Run the PaddingDemo program
ParallelTransitionDemo - Run the ParallelTransitionDemo program
PathTransitionDemo - Run the PathTransitionDemo program
RotateTransitionDemo - Run the RotateTransitionDemo program
ScaleTransitionDemo - Run the ScaleTransitionDemo program
SequenceContentDemo - Run the SequenceContentDemo program
SequentialTransitionDemo - Run the SequentialTransitionDemo program
SGTimelineDemo - Run the SGTimelineDemo program
SplitPaneDemo - Run the SplitPaneDemo program
StrokeTransitionDemo - Run the StrokeTransitionDemo program
SwingDemo - Run the SwingDemo program
TabDemo - Run the TabDemo program
TableViewDemo - Run the TableViewDemo program
TextAreaDemo - Run the TextAreaDemo program
TextFieldDemo - Run the TextFieldDemo program
TimelineDemo - Run the TimelineDemo program
TitledPaneDemo - Run the TitledPaneDemo program
ToggleButtonDemo - Run the ToggleButtonDemo program
ToolBarDemo - Run the ToolBarDemo program
Transform3DDemo - Run the Transform3DDemo program
TransitionDemo - Run the TransitionDemo program
TranslateTransitionDemo - Run the TranslateTransitionDemo program
TreeViewDemo - Run the TreeViewDemo program
TriggerDemo - Run the TriggerDemo program
VanishingCirclesDemo - Run the VanishingCirclesDemo program
WebViewDemo - Run the WebViewDemo program

Documentation tasks
-------------------
groovydoc - Generates Groovydoc API documentation for the main source code.
javadoc - Generates Javadoc API documentation for the main source code.

Help tasks
----------
dependencies - Displays the dependencies of root project 'groovyfx'.
help - Displays a help message
projects - Displays the sub-projects of root project 'groovyfx'.
properties - Displays the properties of root project 'groovyfx'.
tasks - Displays the tasks runnable from root project 'groovyfx' (some of the displayed tasks may belong to subprojects).

Upload tasks
------------
uploadArchives - Uploads all artifacts belonging to configuration ':archives'.

Verification tasks
------------------
check - Runs all checks.
test - Runs the unit tests.

Other tasks
-----------
install - Does a maven install of the archives artifacts into the local .m2 cache.

Rules
-----
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.
Pattern: clean<TaskName>: Cleans the output files of a task.

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 15.984 secs

ここまではよい。





デモの実行

[D:\workspace_other\groovyfx\trunk\groovyfx]gradle  AnalogClockDemo
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileDemoJava UP-TO-DATE
:compileDemoGroovy
>>> a serious error occurred: javafx/application/Application
>>> stacktrace:
java.lang.NoClassDefFoundError: javafx/application/Application
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:410)
        at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:696)
        at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:564)
        at org.codehaus.groovy.control.ResolveVisitor.resolveToClass(ResolveVisitor.java:709)
        at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
        at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1235)
        at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:148)
        at org.codehaus.groovy.control.CompilationUnit$8.call(CompilationUnit.java:601)
        at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:839)
        at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:544)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:493)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:476)
        at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:67)
        at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:180)
        at org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompile(FileSystemCompiler.java:148)
        at org.codehaus.groovy.tools.FileSystemCompiler.main(FileSystemCompiler.java:162)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        ... 27 more

FAILURE: Build failed with an exception.

*1322690998* What went wrong:
Execution failed for task ':compileDemoGroovy'.
Cause: Forked groovyc returned error code: 1

*1322690999* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 17.438 secs

JavaFXのクラスが見つからないと怒られる。

[D:\workspace_other\groovyfx\trunk\groovyfx]groovy src/demo/groovy/AnalogClockDemo.groovy


groovyコマンドで実行すると動作する。
なんで?

JAVAFX_HOMEの確認

[c:\usr\opt\GroovyFX\GroovyFX-0.1]set JAVAFX_HOME
JAVAFX_HOME=C:\usr\opt\JavaFX\JavaFX2.0.1

正しく設定してある。

CLASSPATHの確認

[c:\usr\opt\GroovyFX\GroovyFX-0.1]set CLASSPATH
CLASSPATH=.\;c:\usr\opt\GroovyFX\GroovyFX-0.1\build\libs\groovyfx-0.1-SNAPSHOT.jar;C:\usr\opt\JavaFX\JavaFX2.0.1\rt\lib\jfxrt.jar

正しく設定してある。

javapで確認

[c:\usr\opt\GroovyFX\GroovyFX-0.1]javap javafx/application/Application
Compiled from "Application.java"
public abstract class javafx.application.Application {
  public javafx.application.Application();
  public static void launch(java.lang.Class<? extends javafx.application.Application>, java.lang.String[]);
  public static void launch(java.lang.String[]);
  public void init() throws java.lang.Exception;
  public abstract void start(javafx.stage.Stage) throws java.lang.Exception;
  public void stop() throws java.lang.Exception;
  public final javafx.application.HostServices getHostServices();
  public final javafx.application.Application$Parameters getParameters();
  public final void notifyPreloader(javafx.application.Preloader$PreloaderNotification);
}

参照可能

gadleをデバッグオプション --debug を付けて実行

13:04:52.828 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] Execute:Java13CommandLauncher: Executing 'C:\usr\opt\java\jdk1.7.0_01\jre\bin\java' with arguments:
'-classpath'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main;C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main;C:\Documents and Settings\orangeclover\.gradle\caches\artifacts-4\org.codehaus.groovy\groovy-all\c12498cf18507aa6433a94eb7d3e77d5\jars\groovy-all-1.8.0.jar;C:\usr\opt\Gradle\gradle-1.0-milestone-6\lib\plugins\commons-cli-1.2.jar'
'-Dfile.encoding=MS932'
'org.codehaus.groovy.tools.FileSystemCompiler'
'--classpath'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main;C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main;C:\Documents and Settings\orangeclover\.gradle\caches\artifacts-4\org.codehaus.groovy\groovy-all\c12498cf18507aa6433a94eb7d3e77d5\jars\groovy-all-1.8.0.jar;C:\usr\opt\Gradle\gradle-1.0-milestone-6\lib\plugins\commons-cli-1.2.jar'
'-j'
'-Fg'
'-Jsource=1.5'
'-Jtarget=1.5'
'-d'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\demo'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\AccordionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\AnalogClockDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\AnchorDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\AnimationDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\BindDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\BlendEffectDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\BorderPaneDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ChartDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ChoiceBoxDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ColorfulCirclesDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\EffectsDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FXBindableDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FXMLDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FadeTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FileChooserDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FillAndStrokeDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\FillTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\GradientDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\GridPaneDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\GroovyFXDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\HTMLEditorDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ImageDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\LightingEffectDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\MediaViewDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\MenuDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\PaddingDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ParallelTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\PathTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\RotateTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\SGTimelineDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ScaleTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\SequenceContentDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\SequentialTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\SplitPaneDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\StrokeTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\SwingDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TabDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TableViewDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TextAreaDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TextFieldDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TimelineDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TitledPaneDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ToggleButtonDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\ToolBarDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\Transform3DDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TranslateTransitionDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TreeViewDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\TriggerDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\VanishingCirclesDemo.groovy'
'C:\usr\opt\GroovyFX\GroovyFX-0.1\src\demo\groovy\WebViewDemo.groovy'

The ' characters around the executable and arguments are
not part of the command.

確かにjfxrt.jarがCLASSPATHには設定されていないな。


同じコマンドプロンプトから、gradleとbuild.gradleとgardle、greziは起動できるんだよな。
うーん。gardle? 分からん。。。

build.gradleの内容

apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'signing'

// Set Maven coordinates
group = 'org.codehaus.groovy.modules.groovyfx'
archivesBaseName = "groovyfx"
version = '0.1-SNAPSHOT'

// Read environment and set properties
javafxHome = System.env['JAVAFX_HOME']
isRelease = !version.endsWith('SNAPSHOT')

// Define a source set for the non-standard src/demo directory
sourceSets {
    demo {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
        groovy {
            srcDir = 'src/demo/groovy'
        }
        resources {
            srcDir = 'src/demo/resources'
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    groovy 'org.codehaus.groovy:groovy-all:1.8.0'
    compile 'asm:asm:3.2'
    compile files("${javafxHome}/rt/lib/jfxrt.jar")
}

uploadArchives {
    repositories.mavenDeployer {
        repository(url: 'https://nexus.codehaus.org/content/repositories/snapshots/') {
            authentication()
        }
        //repository(url: "file:///Users/dean/temp/m2")
        pom.project {
            name 'GroovyFX'
            url 'http://groovy.codehaus.org/GroovyFX'
            description 'Groovy bindings for JavaFX 2.x'
            packaging 'jar'
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'repo'
                }
            }
            scm {
                developerConnection 'scm:https://svn.codehaus.org/gmod/groovyfx/'
                connection 'scm:http://svn.codehaus.org/gmod/groovyfx/'
                tag 'trunk'
                url 'http://fisheye.codehaus.org/browse/gmod/groovyfx/'
            }
            developers {
                developer { name 'Jim Clarke' }
                developer { name 'Dean Iverson' }
            }
        }
    }
}
// Add a dynamic task to run each of the demos in src/demo/groovy
new File('src/demo/groovy').eachFileMatch(~/.*Demo.groovy/) { file ->
    def taskName = file.name - '.groovy'
    task "$taskName"(type: JavaExec) {
        group = "Demo"
        description = "Run the $taskName program"
        main = taskName
    }
}

gradleで設定されてるCLASSPATHを確認してみる

:compileDemoGroovyで失敗してるから
runtimeClasspathの値を出力してみた。

// Define a source set for the non-standard src/demo directory
sourceSets {
    demo {
        compileClasspath += sourceSets.main.output
        println "compileClasspath="
        compileClasspath.each{println it}
        runtimeClasspath += sourceSets.main.output 
        println "runtimeClasspath="
        runtimeClasspath.each{println it}

        groovy {
            srcDir = 'src/demo/groovy'
        }
        resources {
            srcDir = 'src/demo/resources'
        }
    }
}
compileClasspath=
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main
runtimeClasspath=
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\demo
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\demo
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main

あれ?「jfxrt.jar」がない・・・


デモ実行のときのruntimeClasspathも表示してみる

// Add a dynamic task to run each of the demos in src/demo/groovy
new File('src/demo/groovy').eachFileMatch(~/.*Demo.groovy/) { file ->
    def taskName = file.name - '.groovy'
    task "$taskName"(type: JavaExec) {
        group = "Demo"
        description = "Run the $taskName program"
        main = taskName
        println "sourceSets.main.runtimeClasspath="
        sourceSets.main.runtimeClasspath.each{println it}
        println "sourceSets.demo.runtimeClasspath="
        sourceSets.demo.runtimeClasspath.each{println it}
        classpath sourceSets.main.runtimeClasspath + sourceSets.demo.runtimeClasspath
    }
}
sourceSets.main.runtimeClasspath=
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main
C:\usr\opt\JavaFX\JavaFX2.0.1\rt\lib\jfxrt.jar
C:\Documents and Settings\orangeclover\.gradle\caches\artifacts-4\asm\asm\c12498cf18507aa6433a94eb7d3e77d5\jars\asm-3.2.jar
C:\Documents and Settings\orangeclover\.gradle\caches\artifacts-4\org.codehaus.groovy\groovy-all\c12498cf18507aa6433a94eb7d3e77d5\jars\groovy-all-1.8.0.jar
sourceSets.demo.runtimeClasspath=
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\demo
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\demo
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\classes\main
C:\usr\opt\GroovyFX\GroovyFX-0.1\build\resources\main

sourceSets.main.runtimeClasspath には「jfxrt.jar」がある


んーーー、なにがだめなんだ?
どうすればいいんだ???


gradleからGroovyFXのデモ動かせた人、もしくは、gradle分かる人、教えてーーーー


なんで入れてないんだろう・・・

build.gradleのjavafxHome変数はきちんと値を取得できているのでしょうか?printlnしてみては?

// Read environment and set properties
javafxHome = System.env['JAVAFX_HOME']
isRelease = !version.endsWith('SNAPSHOT')
println javafxHome
println new File("${javafxHome}/rt/lib/jfxrt.jar").exists()
[C:\usr\opt\groovyfx\GroovyFX-0.1]gradle AnalogClockDemo
C:\usr\opt\JavaFX\JavaFX2.0.1
true
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileDemoJava UP-TO-DATE
:compileDemoGroovy
>>> a serious error occurred: javafx/application/Application
>>> stacktrace:
java.lang.NoClassDefFoundError: javafx/application/Application

${javafxHome} は正しい。
${javafxHome}/rt/lib/jfxrt.jar も存在する。


GroovyFXのデモをgradleを使って起動ができない・・・の対処







コレ買わなきゃダメ?




Hans Dockter、Tim Berglund、Matthew Mccullough
参考価格 : ¥ 2,051


価格: ¥ 2,029


価格は記載時点のものです。購入前にAmazonでご確認ください。