2015-04-06 54 views
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) 

相似 - 但不完全相同。仍然讓我覺得它是一個圖書館問題。

+0

類路徑問題?你如何運行你的代碼? –

+0

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)) –

+0

Kafka正在運行在不同的機器上。不知道這些版本會如何爭論。無論如何 - 卡夫卡版本是最新的。我會嘗試在本地scala版本上進行降級,看看是否會改變任何內容。 – ethrbunny

回答

1

遇到了這個問題下面卡夫卡POM依賴關係:

<dependency> 
    <groupId>org.apache.kafka</groupId> 
    <artifactId>kafka_2.9.2</artifactId> 
    <version>0.8.2.0</version> 
    <scope>compile</scope> 
</dependency> 

錯誤堆棧:

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.augmentString(Ljava/lang/String;)Lscala/collection/immutable/StringOps; 
    at kafka.utils.VerifiableProperties.getShortInRange(VerifiableProperties.scala:85) 
    at kafka.producer.SyncProducerConfigShared$class.$init$(SyncProducerConfig.scala:53) 
    at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:51) 
    at kafka.producer.ProducerConfig.<init>(ProducerConfig.scala:56) 
    at dominus.intg.jms.kafka.KafkaProducer.main(KafkaProducer.java:38) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 

升級到0.8.2.1,這個問題已經一去不復返了。

<dependency> 
    <groupId>org.apache.kafka</groupId> 
    <artifactId>kafka_2.10</artifactId> 
    <version>0.8.2.1</version> 
    <scope>compile</scope> 
</dependency>