Eclipse NoClassDefFoundError…org/apache/commons/cli/CommandLineParser作为Groovy脚本运行时

Eclipse NoClassDefFoundError…org/apache/commons/cli/CommandLineParser作为Groovy脚本运行时,eclipse,groovy,gradle,eclipse-kepler,Eclipse,Groovy,Gradle,Eclipse Kepler,我刚刚安装了EclipseKepler,正在尝试从github恢复我的所有项目。这些项目都是gradle项目,所以我的程序非常 克隆git回购协议 梯度日食 将项目导入Eclipse 一切似乎都很好,只是我不能在项目中以“Groovy脚本”的形式运行脚本。当我尝试时,控制台喷出 java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser at java.lang.Class.getDeclaredMet

我刚刚安装了EclipseKepler,正在尝试从github恢复我的所有项目。这些项目都是gradle项目,所以我的程序非常

  • 克隆git回购协议
  • 梯度日食
  • 将项目导入Eclipse
  • 一切似乎都很好,只是我不能在项目中以“Groovy脚本”的形式运行脚本。当我尝试时,控制台喷出

    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。stacktrace是什么意思?我如何克服它

    导致我的问题的存储库位于


    我的gradle是eclipse开普勒中groovy 1.8.6上的1.11,groovy eclipse插件版本为:2.8.0.xx-20130703-1600-e43-RELEASE

    看起来,在创建“groovy脚本”运行配置时,主类被设置为
    org.codehaus.groovy.tools.GroovyStarter
    ,而不是您打算运行的脚本。将其替换为要运行的Groovy类/脚本会对问题进行排序

    更新

    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"])
                }
            }
        }
    }
    
    经过一些挖掘,解决问题的方法是:

    • 从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"])
                }
            }
        }
    }
    

    您使用的是哪个版本的Gradle?groovy 1.8.6上的Gradle 1.11在JUNO中似乎也不起作用。这确实起作用(将调试配置从org.codehaus.groovy.tools.GroovyStarter更改为特定类),但我很惊讶我需要这样做。非“GradleEclipse”项目通过org.codehaus.groovy.tools.GroovyStarter运行良好。我开始意识到“GradleEclipse”设置环境是错误的。这感觉更像是一个解决方案,而不是一个解决方案,但它解除了我的阻碍。看起来Gradle创建的配置中确实缺少了一些东西。尝试应用本文中建议的方法,但没有解决问题。谢谢。像这样的事情最终奏效了。我必须将对groovy的编译依赖性留在内存中,否则直接向上的gradle构建将失败。但是,保留它并添加您描述的eclipse任务覆盖似乎可以做到这一点。我怀疑如果我想转到Groovy2.x,我可能会遇到麻烦,但这是另一天的挑战。再次感谢。