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

gradle application plugin and missing classpath for kafka storm Spout

我正在尝试将应用程序插件用于 运行 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 插件?

此失败表明缺少依赖项。

也许将 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