2013-02-06 73 views
4

正如主題描述中所述,我試圖使Kafka 0.8Scala 2.9.2一起運行。試圖在Scala 2.9.2上構建並運行Apache Kafka 0.8而沒有成功

我能夠使用0.8https://cwiki.apache.org/KAFKA/kafka-08-quick-start.html)的快速入門獲得工作版本,但默認情況下它是針對Scala 2.8.0編譯的。

我試圖修改步驟

​​

./sbt "++2.9.2 package" 

它編譯沒有錯誤,但在啓動它抱怨找不到主類。

/tmp/kafka-8-test/kafka[0.8]$ bin/kafka-server-start.sh onfig/server1.properties 
Error: Could not find or load main class kafka.Kafka 

任何幫助將不勝感激。

回答

4

問題是bin/kafka-server-start.sh腳本使用bin/kafka-run-class.sh來執行生成的jar文件。

這個腳本硬編碼的版本,所以你需要定製這樣的:

... 
library=$(echo "$ivyPath/org.scala-lang/scala-library/jars/scala-library-2.9.2.jar") 
CLASSPATH=$CLASSPATH:$library 

compiler=~$(echo "$ivyPath/org.scala-lang/scala-compiler/jars/scala-compiler-2.9.2.jar") 
CLASSPATH=$CLASSPATH:$compiler 

log4j=$(echo "$ivyPath/log4j/log4j/jars/log4j-1.2.15.jar") 
CLASSPATH=$CLASSPATH:$log4j 

slf=$(echo "$ivyPath/org.slf4j/slf4j-api/jars/slf4j-api-1.6.4.jar") 
CLASSPATH=$CLASSPATH:$slf 

zookeeper=$(echo "$ivyPath/org.apache.zookeeper/zookeeper/jars/zookeeper-3.3.4.jar") 
CLASSPATH=$CLASSPATH:$zookeeper 

jopt=$(echo "$ivyPath/net.sf.jopt-simple/jopt-simple/jars/jopt-simple-3.2.jar") 
CLASSPATH=$CLASSPATH:$jopt 

for file in $base_dir/core/target/scala-2.9.2/*.jar; 
do 
    CLASSPATH=$CLASSPATH:$file 
done 

for file in $base_dir/core/lib/*.jar; 
do 
    CLASSPATH=$CLASSPATH:$file 
done 

for file in $base_dir/perf/target/scala-2.9.2/kafka*.jar; 
do 
    CLASSPATH=$CLASSPATH:$file 
done 
... 
+0

謝謝你,那完美無瑕。 – twes

9

kafka-run-class.sh是硬編碼到斯卡拉2.8.0。您可以按照prenomenon的建議將2.8.0更改爲2.9.2。

這個工作對我來說:

  • 的Linux | Unix的

    sed -i "s/2.8.0/2.9.2/g" bin/kafka-run-class.sh

  • 的MacOS

    sed -i.bak "s/2.8.0/2.9.2/g" bin/kafka-run-class.sh

+2

使用Scala 2.9.2構建Kafka我必須爲每個構建命令添加scala版本,比如'./sbt「++ 2.9.2 update」' './sbt「++ 2.9.2 package」' './sbt「++ 2.9.2 make-pom」' './sbt「++ 2.9.2程序集包相關性」 – asmaier

0

使用最新版本的Kafka 0.8.1.1和gradlew,「SCALA_VERSION」是腳本中的一個變量。

SCALA_VERSION = 2.10.4

然而,地方出了差錯後:

``` ./gradlew -PscalaVersion = 2.10.4罐子

```

其中有一個文件是不是有2.10.4部分,但只有2.10:

[email protected]:~/data/kafka/kafka-0.8.1.1-src$ find . -name '*.jar' ./perf/build/libs/kafka-perf_2.10-0.8.1.1.jar ./clients/build/libs/kafka-clients-0.8.1.1.jar ./system_test/migration_tool_testsuite/0.7/lib/kafka-perf-0.7.0.jar ./system_test/migration_tool_testsuite/0.7/lib/kafka-0.7.0.jar ./system_test/migration_tool_testsuite/0.7/lib/zkclient-0.1.jar ./examples/build/libs/kafka-examples-0.8.1.1.jar ./core/build/libs/kafka_2.10-0.8.1.1.jar ############ 2.10 instead of 2.10.4 ? ./core/build/dependant-libs-2.10.4/snappy-java-1.0.5.jar ./core/build/dependant-libs-2.10.4/metrics-core-2.2.0.jar ./core/build/dependant-libs-2.10.4/zkclient-0.3.jar ./core/build/dependant-libs-2.10.4/log4j-1.2.15.jar ./core/build/dependant-libs-2.10.4/slf4j-api-1.7.2.jar ./core/build/dependant-libs-2.10.4/zookeeper-3.3.4.jar ./core/build/dependant-libs-2.10.4/jopt-simple-3.2.jar ./core/build/dependant-libs-2.10.4/scala-library-2.10.4.jar ./target/scala-2.10/kafka-0-8-1-1-src_2.10-0.1-SNAPSHOT.jar ./lib/apache-rat-0.8.jar ./contrib/hadoop-consumer/lib/piggybank.jar ./contrib/hadoop-consumer/build/libs/kafka-hadoop-consumer-0.8.1.1.jar ./contrib/hadoop-producer/lib/piggybank.jar ./contrib/hadoop-producer/build/libs/kafka-hadoop-producer-0.8.1.1.jar ./contrib/build/libs/contrib-0.8.1.1.jar ./gradle/wrapper/gradle-wrapper.jar

作爲解決方法,拷貝到2.10.4名稱,卡夫卡開始正確。

```

CP芯/建造/庫/ kafka_2.10-0.8.1.1.jar芯/建造/庫/ kafka_2.10。4-0.8.1.1.jar ```

相關問題