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

标签 intellij-idea groovy groovy-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: unable to resolve class 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(来自 groovy-sdk-2.1.0)和 IntelliJ IDEA 12.0.3 测试了您的问题。我得到的唯一异常(exception)是:

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

关于intellij-idea - 如何获取依赖项并使其与 IntelliJ 项目一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14095430/

相关文章:

java - 在 Intellij 2017.2.4 上使用 Glassfish 4.1.2 时出现问题

java - 使用 Gradle 在 Spring Boot 项目中引用来自 Kotlin 测试的 Java 代码时出现未解析的引用

intellij-idea - PyCharm:如何在文件模板中使用实时模板

groovy - Jenkins Groovy : What triggered the build

groovy - 安装grape依赖项时如何排除本地maven存储库

intellij-idea - Intellij IDEA 未从 Groovy 项目中的 @Grab 导入依赖项

groovy - 如何在 Grape 中设置自定义 Maven 存储库管理器

java - IntelliJ IDEA 添加 JDK 10 : “The selected directory is not a valid home for JDK”

groovy - 如何在Groovy中编写此Gradle构建脚本片段?

testing - 多个测试的相同 `where` 子句