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

时间:2012-12-30 22:40:10

标签: groovy intellij-idea 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

我使用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 /下)

什么能引起这种奇怪而极其令人沮丧的问题?

1 个答案:

答案 0 :(得分: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)
                }
            }
        }
    }
}

我不确定,但我认为原因是这个错误here。应该在Groovy 2.2中修复,我们将看到。