GroovyWrapper java.lang.NoClassDefFoundError:CSVParser

时间:2014-07-16 05:29:57

标签: groovy noclassdeffounderror

我有一个工作的groovy脚本 - myscript.groovy

使用GroovyWrapper后:groovy GroovyWrapper -m myscript -c

下一步是运行我编译的代码:java -jar myscript.jar

跑完后我出错:

Exception in thread "main" java.lang.NoClassDefFoundError: CSVParser
    at pro.run(pro.groovy:1963)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1085)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909) bla-bla-bla ... 

以下是我使用CSVParser类的 myscript.groovy

def inputPath='D://'

class CSVParser {
    static def parseCSV(file,closure) {
        def lineCount = 0
        file.eachLine() { line ->
            def field = line.tokenize(",")
            lineCount++
            closure(lineCount,field)
        }
    }
}

use(CSVParser.class) {
    filename='filename_for_parsing.txt'
    File file = new File(inputPath,filename)
    if(file.size()>0){
        file.parseCSV { index,field ->
            variable1="${field[0]}"
            variable2="${field[1]}"
            variable3="${field[2]}"
            println variable1
            println variable2
            println variable3                        
        }
    }
}

我无法理解:我哪里错了,错在哪里。

1 个答案:

答案 0 :(得分:1)

注意:我已删除之前的答案,因为它与真正的问题无关。

基本上,GroovyWrapper创建的jar不起作用,因为CSVParser类没有包含在jar中。您可以构建jar文件并使用在线decompiler进行检查。

解决方案是轻松修改您使用的构建脚本。我已经在GitHub和example Guillame Laforge上创建了一个twitted项目来查看。他帮了忙!