json4s xpath 报告 java.lang.NoSuchMethodError

json4s xpath report java.lang.NoSuchMethodError

我遵循了 https://github.com/json4s/json4s 的“XPath + HOFs”部分的示例,下面是我的源代码:

import org.json4s._
import org.json4s.native.JsonMethods._

object HiveToCSVEngine {
def main(args: Array[String]): Unit = {

    val json = parse( """
     { "name": "joe",
       "children": [
         {
           "name": "Mary",
           "age": 5
         },
         {
           "name": "Mazy",
           "age": 3
         }
       ]
     }
                      """)
    print((json \ "children")(0))
}
}

没有编译错误,但在运行时出现了以下错误:

Exception in thread "main" java.lang.NoSuchMethodError:     
scala.collection.immutable.$colon$colon.hd()Ljava/lang/Object;
at org.json4s.MonadicJValue.$bslash(MonadicJValue.scala:18)

谁能帮我解决这个问题?

===程序是如何调用的=== 我使用gradle到运行上面的代码,下面是build.gradle文件(依赖是其他程序需要的):

apply plugin: 'scala'
apply plugin: 'java'
apply plugin:'application'
//mainClassName = 'SimpleMail'
mainClassName = System.getProperty("mainClassName")
compileJava {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}
repositories {
    mavenCentral()
}
dependencies {
    //can't comment scalaTools on linux because of gradle version problem
    scalaTools "org.scala-lang:scala-compiler:2.11.1"
    compile 'org.scala-lang:scala-library:2.11.1'
    compile 'com.github.tototoshi:scala-csv_2.10:1.0.0'
    compile 'com.darwinsys:hirondelle-date4j:1.5.1'
    compile 'com.sun.mail:javax.mail:1.5.2'
    compile 'org.apache.hive:hive-jdbc:0.13.1'
    compile 'org.apache.hadoop:hadoop-core:1.2.1'
    compile 'mysql:mysql-connector-java:5.1.31'
    compile 'net.sourceforge.expectj:expectj:2.0.7'
    compile 'org.apache.commons:commons-lang3:3.3'
    compile 'org.json4s:json4s-native_2.10:3.2.10'
    compile 'org.json4s:json4s-jackson_2.10:3.2.10'
}
run {
    // set heap size for the test JVM(s)
    minHeapSize = "128m"
    maxHeapSize = "512m"
    // set JVM arguments for the test JVM(s)
    jvmArgs '-XX:MaxPermSize=256m'

    if ( project.hasProperty('args') ) {
        def paras=project.args.trim()
        println "args:"+paras
        def leading_paras=[]
        while(paras.contains('\'')){
            def prefix=paras.substring(0,paras.indexOf('\''))
            def right_part=paras.substring(prefix.size()+1)
            def middle=right_part.substring(0,right_part.indexOf('\''))
            def tail=right_part.substring(middle.size()+1)

            if(prefix.size()>0) {
                leading_paras = (leading_paras << prefix.split('\s+')) <<     [middle]
            }else{
                leading_paras =leading_paras<<[middle]
            }
            paras=tail.trim()
        }
        leading_paras=(leading_paras<<paras.split('\s+')).flatten()
        println "[param list]"
        for(String para:leading_paras){
            println "param:"+para+"."
        }
        args (leading_paras as String[])
    }
}

我运行下面的命令来调用程序:

gradle run -DmainClassName=HiveToCSVEngine

之前:

  compile 'org.json4s:json4s-native_2.10:3.2.10'
  compile 'org.json4s:json4s-jackson_2.10:3.2.10'

更新:

  compile 'org.json4s:json4s-native_2.11:3.2.10'
  compile 'org.json4s:json4s-jackson_2.11:3.2.10'

我认为你的 scala2.11,但你的 json4s 是 2.10