GroovyFXのデモをgradleを使って起動ができない・・・
GroovyFXのデモを動かすところまでを1から説明する
GroovyFXのデモをgradleを使って動かすところまでを説明するつもりだったが、
gradleを使って実行できない・・・
デモの一覧を表示する
[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
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
参考価格 :
価格は記載時点のものです。購入前にAmazonでご確認ください。