gradle应用程序插件和缺少kafka storm Spout的类路径

时间:2015-11-30 19:06:29

标签: java gradle apache-kafka apache-storm

我尝试使用应用程序插件来运行Kafka-Storm拓扑。 这是我的build.gradle

apply plugin: 'java'
apply plugin: 'application'

mainClassName = "Library"

repositories {
    jcenter()
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.13',
            'org.apache.storm:storm-core:0.10.0',
            'org.apache.storm:storm-kafka:0.10.0'
    testCompile 'junit:junit:4.12'
}

当我启动./gradlew run时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: kafka/api/OffsetRequest
    at storm.kafka.KafkaConfig.<init>(KafkaConfig.java:43)
    at storm.kafka.SpoutConfig.<init>(SpoutConfig.java:40)
    at Library.main(Library.java:21)
Caused by: java.lang.ClassNotFoundException: kafka.api.OffsetRequest
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 3 more

我是否以错误的方式配置了application插件?

1 个答案:

答案 0 :(得分:1)

此失败表明缺少依赖关系。

compile 'org.apache.kafka:kafka_2.10:0.8.2.2'添加到dependencies {}块可能会帮助您取得进展。

请注意,根据您正在运行的Kafka等版本,确切的kafka可能会有所不同。

如果要排除传递依赖关系,可以将上面的compile...语句更改为:

dependencies {
  compile('org.apache.kafka:kafka_2.10:0.8.2.2') {
     // transitive = false // No transitive dependencies
     exclude group: 'foo'  // Exclude specific dependencies
  }
}

请参阅https://docs.gradle.org/current/userguide/dependency_management.html