groovysh在Java 1.7.0_75(Windows XP)下崩溃

groovysh在Java 1.7.0_75(Windows XP)下崩溃,groovy,Groovy,在使用Groovy的最新版本(截至本文撰写之时)、2.4.0和Windows XP(sp3)时,我遇到了一个熟悉但令人困惑的错误: C:\>groovysh java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.i

在使用Groovy的最新版本(截至本文撰写之时)、2.4.0和Windows XP(sp3)时,我遇到了一个熟悉但令人困惑的错误:

    C:\>groovysh
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java
:106)
        at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:128)
Caused by: groovy.lang.MissingPropertyException: No such property: leftPadding f
or class: org.codehaus.groovy.tools.shell.util.HelpFormatter
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptByteco
deAdapter.java:51)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setGroovyObjectProp
erty(ScriptBytecodeAdapter.java:532)
        at org.codehaus.groovy.tools.shell.util.HelpFormatter.<init>(HelpFormatt
er.groovy:39)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstru
ctor.java:77)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteN
oUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstru
ctor(CallSiteArray.java:57)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor
(AbstractCallSite.java:230)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor
(AbstractCallSite.java:234)
        at org.codehaus.groovy.tools.shell.Main.main(Main.groovy:68)
        ... 6 more
C:\>groovysh
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。
爪哇:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(delegatingmethodaccess
sorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java
:106)
位于org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:128)
原因:groovy.lang.MissingPropertyException:无此类属性:leftPadding f
或类:org.codehaus.groovy.tools.shell.util.HelpFormatter
位于org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptByteco
java:51)
位于org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setGroovyObjectProp
erty(ScriptBytecodeAdapter.java:532)
位于org.codehaus.groovy.tools.shell.util.HelpFormatter.(HelpFormatt
呃,groovy:39)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:57)
在sun.reflect.delegatingConstructor或AccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:526)
位于org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstru
(www.java:77)
位于org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteN
调用构造函数(ConstructorSite.java:102)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstru
ctor(CallSiteArray.java:57)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor
(AbstractCallSite.java:230)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor
(AbstractCallSite.java:234)
位于org.codehaus.groovy.tools.shell.Main.Main(Main.groovy:68)
... 还有6个
我在使用Groovy 2.3.9时没有遇到任何困难,所以我想知道是否有人有建设性的建议


谢谢。

您的错误发生在HelpFormatter类中。可通过谷歌找到来源,即:

如您所见,类HelpFormatter扩展了org.apache.commons.cli.HelpFormatter

并期望超类具有字段leftPadding,但未找到字段leftPadding

如果在运行groovysh时类路径上有不同版本的apache commons-cli.jar,则可能会出现这种情况

因为我不能重现你的问题,这是我能看到的最可能的原因

回显%CLASSPATH


在Windows中查看类路径(我想)。

2014年9月,引入了缺少的
leftPadding
。您确定没有混合使用这两种安装吗?我删除了Groovy的上一次安装(2.3.9),设置了Groovy_HOME变量,我的path变量为:C:\Groovy-2.4.0\bin。我可以毫无问题地运行和编译groovy程序,但groovysh的上述问题仍然存在。它可能是类路径上的条目吗?可能是另一个程序的.jar文件,例如clojure-1.6.0.jar?我也可以毫不费力地编译和运行java程序。谢谢你的回答。我已将我的类路径设置减少为更精简的:。;C:\lein;C:\lein\bin;C:\progra~1\scala\bin;C:\atomicscala\examples但问题仍然存在。我不知道哪个库可能包含apache commons cli代码。是否Groovy 2.4.0与jdk 1.7.0_75不完全兼容,因为这是一个非常新的更新(就像Groovy的2.4.0一样)?如果我将当前工作目录设置为C:\Groovy-2.4.0或C:\Groovy-2.4.0\bin,启动groovysh不会有任何困难。由于后者是我人生道路上继“.”之后的第二个条目,这个问题被证明既令人困惑又令人沮丧。