basilisk-fw について試食した雑感
F0000;">この記事は、JavaFX Advent Calendar 2015 - Qiita の 15 日目の記事です。
- 昨日は Yucchi_jp - Qiita さんの http://yucchi.jp/blog/?p=2143 のお話です
- 明日は c9katayama - Qiitaさんの カードリーダー? のお話です
basilisk-fw ってなんぞや? って方も多いと思います。
Java Champion で griffon を作られている aalmirayさんが新規立ち上げたプロジェクトです。
現時点では griffonとほぼおなじものらしいのですが、
今後はJavaFX専用に特化していこうみたいなプロジェクト。
まあここらへんの事情は
griffon-fw 自体が
- 未だにSwingBuilder等でSwingのサポートをしていたり
- 他のPluginがverupの時に動かなくなって相互影響が出やすい
等の状況で色々と引きずられやすいからでしょうね。
でもまあtwitterだと
griffon や basilisk みたいなアカウントやハッシュタグ等 が結構あってググりビリティが悪いので
情報収集がgrails等より大変で不遇だなーと思いながら見てたりしてます。。
実際に
のチュートリアルを触ってみた感想など
事前準備編)
チュートリアルベースであれば
- lazybone
- java8
- javafxのために必要
- java6 or java7
- org.javafxports:jfxmobile-plugin のretrolambdaに依存
が必要になります
上記のチュートリアルだと
- SDKManが下記のソフト必須のように書いていますが、
- lazybones
- gradle
に記載があるように 0.8.1
から直接バイナリをダウンロードしてきて
bin/lib をPATHに通せば,lazybone自体は Windowでも使うことが出来ます.
gradle自体も、実はgradlew warperが生成されているのでいりません*1
■jfxmobile-plugin 単体に関して
ぐらいしか情報出てこないかな。。(汗
このpluginは
javafxports / javafxmobile-plugin / source / — Bitbucketのソースを読むと
apk生成は minsdk4/combile sdk21のものを作成する感じ
android gradle pluginは1.1.0の物をクラス継承して使っててちょっと古めかな。。
実行編)
とりあえずチュートリアルを進めていきます
> lazybones create basilisk-javafx-ios sample
この直後状態のままだと動かないので修正を加えます。*2
- build.gradle
retrolambda { if(macosx){ jdk '/usr/libexec/java_home -v 1.8'.execute().text oldJdk '/usr/libexec/java_home -v 1.7'.execute().text } else{ //Linuxとかであればgradle.propertiesから参照 jdk System.properties['JAVA8_HOME'] oldJdk System.properties['JAVA7_HOME'] } javaVersion JavaVersion.VERSION_1_7 }
- gradle.properties
group = org.example version = 0.1.0-SNAPSHOT groovyVersion=2.4.4 spockVersion=1.0-groovy-2.4 org.gradle.daemon=true org.gradle.parallel=true org.gradle.configureondemand=true org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m -Dfile.encoding=UTF-8 -Dgroovy.source.encoding=UTF-8 org.gradle.workers.max=4 # window/linux とかの場合 org.gradle.java.home=/opt/jdk8 systemProp.JAVA8_HOME=/opt/jdk8 systemProp.JAVA7_HOME=/opt/jdk7 systemProp.ANDROID_HOME=/opt/android-sdks
- gradle/wrapper/gradle-wrapper.properties
- 最新のgradleを使うように修正
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-bin.zip
でもこの状態でも
> gradlew build
はコケてしまいますので
> gradlew build -x checkMain -x test
で実行します。
によるとtemplateが治ってるそうですが、まだjcenterにリリースされていない状態のよう
ビルド完了後
> gradlew run
で通常のJavaFXとしては実行できます。
その後
> gradlew launchIPhoneSimulator
をすると、依存ライブラリをかなりの時間かけて落としてきてやっと
iPhoneSimulatorで 実行されるみたいな状況になります。。。
考察編)
jfxmobile-plugin はandroidの対応が出来るはずなので
試してみましたが解決できず質問中。
理由的には、
groovy =>java=>dex ではなくgroovy =>dex- issueの回答見たらretorolamdaがinvokeDynamicを使ってるコードを変換できないので無理とのこと><
やろうとして出来無いからだと思うけど。。(汗
ちなみにこのチュートリアルのlazyboneのテンプレートWindowsでは動きません><。
理由は jfxmobile-plugin が
- iphoneの実行環境チェックtaskでwindowsだとコケる
- gradlew taskのレベルで
- robovmのビルドが基本公式でもmac専用を歌ってる
- 一応windowsでもbuildだけはできたみたいな話はStackOverFlowに出てくるんですけどね(汗
の大本のサンプルレベルでwinだと gradlew tasks できなかったですし・・
ここらへんコメントにすると
> gradlew build
> gradlew run
で普通に実行はできるのでノーマルプロジェクトのテンプレートは欲しかったかなーと
環境に依存しない実行できるものであれば
辺りをコピーしてきて弄る形のほうが楽になってしまう。。
って話になるので対応が後手に回るのは仕方ないのかなーとか考えていたりも・・(苦笑
winサポートの話をするなら
チュートリアルのテンプレートで記述されてる
- grdlew lzpack
- grdlew idea
のタスク対応を説明記載しても良かったのではないかと思う*4
まあデスクトップアプリ主力にすると
ので、そこら辺を簡易にしないと業務リリース向けはやはり難しいのかな−
とか色々と考えてしまうことが有りますが。。