4

IntelliJ 12 内で GroovyFX プロジェクトを開始しようとしています。ただし、IntelliJ で次の簡単なスクリプトをコンパイルして実行することはできませんでした (可能な限り簡単な方法で問題を再現するため)。

@Grab(group='org.codehaus.groovyfx', module='groovyfx', version='0.3.1')
import groovyx.javafx.GroovyFX
println GroovyFX.class.name

Grape の Grab に対する IntelliJ のサポートを使用して、モジュールの依存関係として groovyfx を追加しました (「外部ライブラリ」の下に jar が表示され、その後、エディターはクラスが見つからないと文句を言いません!) それでも、スクリプトを実行すると、エラーがスローされます:

Groovyc: クラス groovyx.javafx.GroovyFX を解決できません

このスクリプトを GroovyConsole で問題なく動作させることができました。

私は別のランダムに選択された依存関係 (Spring ライブラリであることが判明しました) を取得しようとしましたが、うまくいきました:

@Grab(group='org.springframework', module='spring', version='2.5.6')
import org.springframework.jdbc.core.JdbcTemplate
println JdbcTemplate.class.name

Spring ライブラリが機能する正当な理由がわかりませんが、GroovyFX ライブラリは機能しません!!!!

GroovyFx ライブラリが実際にダウンロードされていることも再確認しましたが、あるべき場所 ({user.home}/.groovy/grapes/{group}/{module}/jars/ の下) にあります。

この奇妙で非常に苛立たしい問題の原因は何ですか??

4

1 に答える 1

5

groovyConsole ( groovy-sdk-2.1.0から) と IntelliJ IDEA 12.0.3の両方で問題をテストしました。私が得た唯一の例外は次のとおりです。

Caught: java.lang.NoClassDefFoundError: javafx/application/Application
java.lang.NoClassDefFoundError: javafx/application/Application
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
    ... 1 more

これは、JavaFX ランタイム (jfxrt.jar) がクラスパスに含まれていなかったためです。これは次の方法で修正できます

mvn com.zenjava:javafx-maven-plugin:1.3:fix-classpath

上記のコマンドは、JavaFX Maven Plugin Wikiから取得したものです。一度だけ実行する必要があります。その後、groovyConsole と IntelliJ の両方が機能しています。groovyConsole を再起動する必要がありましたが、これは IntelliJ には必要ありませんでした。

興味深いのは、「外部ライブラリ」の下に GroovyFx-jar が表示されないことです。プラグインなしでプレーンな IDEA コミュニティ エディションを使用しています。

GroovyFX ホームページの Hello World は、IDEA ではそのまま使用できますが、groovyConsole では機能しません。「java.lang.ClassNotFoundException: groovyx.javafx.GroovyFX」も発生します。次のコードでなんとか実行できましたが、最初の実行でしか機能しないため、良い解決策ではありません。その後、groovyConsole を再起動する必要があります。

@GrabConfig(systemClassLoader=true, initContextClassLoader=true)
@Grab(group='org.codehaus.groovyfx', module='groovyfx', version='0.3.1')
import static groovyx.javafx.GroovyFX.start

start {
    stage(title: 'GroovyFX Hello World', visible: true) {
        scene(fill: BLACK, width: 500, height: 250) {
            hbox(padding: 60) {
                text(text: 'Groovy', font: '80pt sanserif') {
                    fill linearGradient(endX: 0, stops: [PALEGREEN, SEAGREEN])
                }
                text(text: 'FX', font: '80pt sanserif') {
                    fill linearGradient(endX: 0, stops: [CYAN, DODGERBLUE])
                    effect dropShadow(color: DODGERBLUE, radius: 25, spread: 0.25)
                }
            }
        }
    }
}

よくわかりませんが、その理由はこのバグだと思います。Groovy 2.2 で修正する必要があります。

于 2013-02-05T13:24:55.193 に答える