首页 > 解决方案 > `groovyConsole` 无法在带有 java 8 的 Ubuntu 18.04 上启动,如何解决?

问题描述

当我从终端运行 groovyConsole 时,它​​放弃了一个异常:

$ groovyConsole 
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:116)
    at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:138)
Caused by: groovy.lang.MissingMethodException: No signature of method: javax.swing.JMenu.setMnemonic() is applicable for argument types: (java.lang.String) values: [F]
Possible solutions: setMnemonic(char), setMnemonic(int), getMnemonic()
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:71)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:77)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:80)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)
    at groovy.ui.view.BasicMenuBar$_run_closure1.doCall(BasicMenuBar.groovy:22)
    at groovy.ui.view.BasicMenuBar$_run_closure1.doCall(BasicMenuBar.groovy)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
    at groovy.lang.Closure.call(Closure.java:420)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.util.FactoryBuilderSupport.dispatchNodeCall(FactoryBuilderSupport.java:899)
    at groovy.util.FactoryBuilderSupport.doInvokeMethod(FactoryBuilderSupport.java:791)
    at groovy.util.FactoryBuilderSupport.invokeMethod(FactoryBuilderSupport.java:511)
    at groovy.util.FactoryInterceptorMetaClass.invokeMethod(FactoryBuilderSupport.java:1322)
    at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:46)
    at groovy.lang.Script.invokeMethod(Script.java:80)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:74)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:83)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:169)
    at groovy.ui.view.BasicMenuBar.run(BasicMenuBar.groovy:21)
    at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1181)
    at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:352)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:68)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:169)
    at groovy.ui.Console$__clinit__closure25.doCall(Console.groovy:267)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:41)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at groovy.ui.ConsoleView$_run_closure1.doCall(ConsoleView.groovy:62)
    at groovy.ui.ConsoleView$_run_closure1.doCall(ConsoleView.groovy)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:104)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1035)
    at groovy.lang.Closure.call(Closure.java:420)
    at groovy.lang.Closure.call(Closure.java:414)
    at groovy.util.FactoryBuilderSupport.dispatchNodeCall(FactoryBuilderSupport.java:899)
    at groovy.util.FactoryBuilderSupport.doInvokeMethod(FactoryBuilderSupport.java:791)
    at groovy.util.FactoryBuilderSupport.invokeMethod(FactoryBuilderSupport.java:511)
    at groovy.util.FactoryInterceptorMetaClass.invokeMethod(FactoryBuilderSupport.java:1322)
    at groovy.lang.GroovyObjectSupport.invokeMethod(GroovyObjectSupport.java:46)
    at groovy.lang.Script.invokeMethod(Script.java:80)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:74)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)
    at groovy.ui.ConsoleView.run(ConsoleView.groovy:59)
    at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1181)
    at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1164)
    at groovy.util.FactoryBuilderSupport$build$4.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
    at groovy.ui.Console.run(Console.groovy:308)
    at groovy.ui.Console$run$1.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:169)
    at groovy.ui.Console.run(Console.groovy:271)
    at groovy.ui.Console$run$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
    at groovy.ui.Console.main(Console.groovy:205)
    ... 6 more

    enter code here

我的系统是:

$ groovy --version
Groovy Version: 2.4.16 JVM: 1.8.0_222 Vendor: Private Build OS: Linux
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"

如何避免这个错误?

标签: javagroovy-console

解决方案


您正面临DebianUbuntuGroovy问题跟踪器中报告的已知问题。

问题已在 Groovy 版本中修复2.6.0-alpha-1。该修复程序在 Ubuntu 软件包版本和 Debian 软件包版本中被反向移植(参见Debian 补丁) 。2.4.17-4ubuntu12.4.17-2

在 Ubuntu Bionic 18.04 LTS 中,可用的 Groovy 软件包版本是2.4.16-1ubuntu1~18.04.1(以及2.4.16-2在 Debian 中)。
版本2.4.17-4ubuntu1在 Ubuntu Focal 20.04 LTS 中可用(目前2.4.20-1在 Debian 测试中)。

所以我想对你来说最简单的解决方案可能是升级到 Ubuntu Focal 20.04 LTS版本。

另一种方法是仅安装 Focal 20.04 中的 groovy 软件包,并保持其他软件包未修改(即保持 Ubuntu Bionic 18.04 提供的版本)。这种解决方案涉及封装钉扎。您可以在Ubuntu wikiDebian wiki或这本出色的 Debian 管理员手册中了解更多信息。


推荐阅读