4

我正在尝试在 IntelliJ 12 中启动 GroovyFX 项目。但是,我无法让 IntelliJ 编译和运行以下简单脚本(以尽可能简单的方式重现问题):

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

我使用 IntelliJ 对 Grape's Grab 的支持将 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 回答