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

Java gradle应用程序插件和缺少kafka storm Spoot的类路径,java,gradle,apache-kafka,apache-storm,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

我正在尝试使用应用程序插件来运行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
线程“main”java.lang.NoClassDefFoundError中出现异常:kafka/api/OffsetRequest 在暴风雨中。卡夫卡。卡夫卡图。(卡夫卡图。爪哇:43) atstorm.kafka.SpoutConfig.(SpoutConfig.java:40) 在Library.main(Library.java:21) 原因:java.lang.ClassNotFoundException:kafka.api.OffsetRequest 位于java.net.URLClassLoader.findClass(URLClassLoader.java:381) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3个以上
我是否以错误的方式配置了
应用程序
插件?

此故障表明缺少依赖项

也许将
compile'org.apache.kafka:kafka_2.10:0.8.2.2'
添加到
dependencies{}
块将帮助您取得进展

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

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

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

就是这样。您认为是否有可能导入卡夫卡依赖项的子集而不是完整的发行版?是的,有两种方法可以做到这一点。我正在用建议更新我的答案谢谢,我实际上知道,我希望有一个专门针对卡夫卡+风暴的软件包。Tnx!