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

Ren*_*ato 4 groovy intellij-idea ruby-grape groovyfx

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

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

我使用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
Run Code Online (Sandbox Code Playgroud)

我看不出Spring库应该工作的原因,但不是GroovyFX库!

我甚至仔细检查了GroovyFx库是否已经实际下载了,它应该在哪里(在{user.home}/.groovy/grapes/{group}/{module}/jars /下)

是什么导致这种奇怪而极其令人沮丧的问题?

Chr*_*ipp 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
Run Code Online (Sandbox Code Playgroud)

这是因为JavaFX运行时(jfxrt.jar)不在类路径中.这可以修复

mvn com.zenjava:javafx-maven-plugin:1.3:fix-classpath
Run Code Online (Sandbox Code Playgroud)

上面的命令取自JavaFX Maven插件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)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道,但我想原因是这个bug 在这里.应该在Groovy 2.2中修复,我们会看到.