java - 将 java 属性传递给 scala - nosuchmethod 错误

标签 java scala properties

我正在尝试从 Kafka site 编译一些示例代码。当 scala 尝试读取 java 属性时,它会给出运行时错误。

错误:

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

关于java - 将 java 属性传递给 scala - nosuchmethod 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29478691/

相关文章:

java - 添加 hashmap 和 arraylist 时出现内存不足错误

java - 检查具有特定属性的对象是否已存在

java - 文件未保存

scala - 在foldleft中使用collection.Map

java - 在 Hibernate 中对属性使用惰性

c# - C# 中的非整数索引索引器属性

java - 一项 Activity 中的三个旋转器

java - 检查 double 是否相等和 Sonar 问题

java - 在电梯应用程序中将 Scala 版本更新为 2.10.0

scala - Scala 的 SQL DSL