【问题标题】:How to grab a dependency and make it work with IntelliJ project?如何获取依赖项并使其与 IntelliJ 项目一起使用?
【发布时间】:2012-12-15 05:58:21
【问题描述】:

我正在尝试在 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/ 下)

什么会导致这个奇怪而令人沮丧的问题??

【问题讨论】:

  • 我会尝试清理本地存储库,看看问题是否得到解决(重命名到另一个目录)
  • 我确实从葡萄存储库中删除了所有内容,它重新下载了罐子但仍然没有解决问题:(
  • 听起来像是 IntelliJ 中的一个错误。
  • 您是否正在使用 .0 rev 的开发系统并希望它能够正常工作? 11.1.5 英尺。

标签: groovy intellij-idea grape groovyfx


【解决方案1】:

我使用 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 中修复,我们会看到。

【讨论】:

  • 我从来没有遇到过 JavaFX 运行时的问题,因为我使用 JavaFX 进行开发,但使用的是纯 Java....我正在尝试使用 GroovyFX 作为“fxml 文件 + Java '控制器'”的替代品组合……但这些问题真的让我很反感。我设法让 Hello World GroovyFX 代码现在在 IntelliJ 中工作,但我使用了一个 Maven 项目,而不是 @Grab ...在 GroovyConsole 中,虽然“println GroovyFX.class.name”命令有效,但 Hello World 代码才不是!我收到 ClassNotFoundException: groovyx.javafx.GroovyFX... 明天将尝试更新我的控制台。
  • 更新了我的帖子。请注意,IDEA 解决方案开箱即用,不需要 Maven。
  • 感谢您研究这个问题,我相信这也会对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2020-01-03
  • 2012-10-25
  • 2019-09-16
相关资源
最近更新 更多