Groovy 如何获取依赖项并使其与IntelliJ项目一起工作?

Groovy 如何获取依赖项并使其与IntelliJ项目一起工作?,groovy,intellij-idea,grape,groovyfx,Groovy,Intellij Idea,Grape,Groovyfx,我正试图在Intellij12中启动一个GroovyFX项目。 但是,我无法让IntelliJ编译并运行以下简单脚本(以尽可能最简单的方式再现问题): 我使用IntelliJ对Grape的Grab的支持来添加groovyfx作为我模块的依赖项(jar显示在“External Libraries”下,编辑器不会抱怨该类丢失!),但是,当我运行脚本时,它仍然会抛出一个错误: Groovyc:无法解析groovyx.javafx.GroovyFX类 我能够让这个脚本在GroovyConsole中正常工

我正试图在Intellij12中启动一个GroovyFX项目。 但是,我无法让IntelliJ编译并运行以下简单脚本(以尽可能最简单的方式再现问题):

我使用IntelliJ对Grape的Grab的支持来添加groovyfx作为我模块的依赖项(jar显示在“External Libraries”下,编辑器不会抱怨该类丢失!),但是,当我运行脚本时,它仍然会抛出一个错误:

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/下)


是什么导致了这个奇怪且极其令人沮丧的问题???

我用groovyConsole(from)和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
上面的命令取自。您只需执行一次。更改之后,groovyConsole和IntelliJ都可以工作。我必须重新启动groovyConsole,这对于IntelliJ是不必要的

有趣的是,我没有在“外部库”下看到GroovyFx jar。我使用的是纯思想社区版,没有任何插件

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中修复,我们将拭目以待。

我会尝试清理本地存储库,看看问题是否得到解决(重命名为另一个目录)。我确实从grape存储库中删除了所有内容,它重新下载了JAR,但仍然没有解决问题:(听起来像是IntelliJ中的一个bug。你使用的是一个.0版本的开发系统吗?11.1.5 ftw。我从来没有遇到过JavaFX运行时的问题,因为我使用JavaFX开发,但使用的是纯Java….我正在尝试使用GroovyFX来替代“fxml文件+Java‘控制器’”组合…但这类问题真的让我很反感。我设法让Hello World GroovyFX代码现在在IntelliJ中工作,但我在GroovyConsole中使用了一个Maven项目,而不是@Grab…虽然“println GroovyFX.class.name”命令可以工作,但Hello World代码不能!我得到了一个ClassNotFoundException:groovyx.javafx.GroovyFX…明天将尝试更新我的控制台。更新了我的帖子。请注意,IDEA解决方案是开箱即用的,不需要Maven。感谢您研究这个问题,我相信这也会帮助其他人。
@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)
                }
            }
        }
    }
}