1
我試圖從Kafka site中編譯一些示例代碼。它在scala試圖讀取java屬性時給出運行時錯誤。將java屬性傳遞給scala - nosuchmethod錯誤
錯誤:
Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Ljava/lang/String;
at kafka.utils.VerifiableProperties.getShortInRange(VerifiableProperties.scala:83)
at kafka.utils.VerifiableProperties.getShort(VerifiableProperties.scala:59)
at kafka.producer.SyncProducerConfigShared$class.$init$(SyncProducerConfig.scala:49)
at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:51)
at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:56)
at Test_Producer.main(Test_Producer.java:28)
這裏是有問題的代碼剪斷。該錯誤來自new ProducerConfig(props)
聲明(上面的第28行)。
Properties props = new Properties();
props.put("metadata.broker.list", "broker1:9092,broker2:9092");
props.put("serializer.class", "kafka.serializer.StringEncoder");
props.put("partitioner.class", "example.producer.SimplePartitioner");
props.put("request.required.acks", "1");
ProducerConfig config = new ProducerConfig(props);
我試着進入問題的代碼,它似乎設置了所有相關的值(IE getProperties找到一個值)。
該代碼生成可以,但也許我正在使用一個不正確的庫?
對此提出建議?
編輯:
代碼正在運行(或假定)在的Intellij 14.
Java是1.8 Scala的庫2.11.6
另一個數據點:如果我註釋掉除第一個屬性('broker1:9092 ...')以外的所有屬性,則會出現此錯誤:
Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Ljava/lang/String;
at kafka.producer.ProducerConfig.liftedTree1$1(ProducerConfig.scala:83)
at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:82)
at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:56)
at Test_Producer.main(Test_Producer.java:28)
相似 - 但不完全相同。仍然讓我覺得它是一個圖書館問題。
類路徑問題?你如何運行你的代碼? –
Kafka不是Scala項目嗎?您使用的Kafka版本是否也針對Scala 2.11編譯?這看起來像scala-library版本的不匹配(如[this](http://search.maven.org/#artifactdetails|org.apache.kafka|kafka_2.11|0.8.2.1|jar)) –
Kafka正在運行在不同的機器上。不知道這些版本會如何爭論。無論如何 - 卡夫卡版本是最新的。我會嘗試在本地scala版本上進行降級,看看是否會改變任何內容。 – ethrbunny