提问者:小点点

运行为Groovy脚本时的NoClassDefFoundError… org/apache/Commons/cli/Command dLineParser


我刚刚安装了Eclipse KEPLER,并试图从github带回我所有的项目。这些项目都是gradle项目,所以我的程序非常…

  1. 克隆git repo
  2. 格莱德日食
  3. 将项目导入Eclipse

一切似乎都很好,除了我不能“Run As, Groovy Script”项目中的脚本。当我尝试时,控制台喷出…

java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
    at java.lang.Class.getMethod0(Class.java:2764)
    at java.lang.Class.getMethod(Class.java:1653)
    at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:99)
    at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:130)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.CommandLineParser
    at org.codehaus.groovy.tools.RootLoader.findClass(RootLoader.java:156)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:128)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

.有趣的是,我可以毫无问题地“运行方式,Java应用程序”。它绝对是一个Groovy项目,因为它在项目图标中有G。堆栈跟踪是什么意思,我如何克服它?

导致我的问题的存储库https://github.com/robertkuhar/StackOverflow

我的gradle是1.11在eclipse kepler中的groovy 1.8.6上,带有Groovy-Eclipse插件版本:2.8.0. xx-20130703-1600-e43-RELEASE


共1个答案

匿名用户

看起来在创建Groovy脚本运行配置时,主类被设置为org.codehaus.groovy.tools. GroovyStarter而不是您要运行的脚本。用您要运行的Groovy类/脚本替换它可以解决问题。

更新

经过一番挖掘解决问题的方法是:

  • 从Gradle构建中删除Groovy依赖项。
  • 按照此答案中的建议配置项目类路径和性质

build. gradle

eclipse {
    project {
        natures.add 'org.eclipse.jdt.groovy.core.groovyNature'
    }
    classpath {
        file {
            withXml {
                Node node = it.asNode()
                node.appendNode('classpathentry',[exported:"true",kind:"con",path:"GROOVY_SUPPORT"]) 
                node.appendNode('classpathentry',[exported:"true",kind:"con",path:"GROOVY_DSL_SUPPORT"])
            }
        }
    }
}