我正在尝试在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 /下)
什么能引起这种奇怪而极其令人沮丧的问题?
答案 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中修复,我们将看到。