我尝试使用应用程序插件来运行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
插件?
答案 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