【问题标题】:gradle application plugin and missing classpath for kafka storm Spoutgradle 应用程序插件和缺少 kafka Storm Spout 的类路径
【发布时间】:2016-03-04 12:41:03
【问题描述】:

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

【问题讨论】:

    标签: java gradle apache-kafka apache-storm


    【解决方案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

    【讨论】:

    • 就是这样。您认为导入 kafka 依赖项的子集而不是完整的发行版是否可行?
    • 是的,有两种方法可以做到这一点。我正在用建议更新我的答案
    • 谢谢,其实我早就知道了,希望有专门针对kafka+storm的包。 Tnx!
    猜你喜欢
    • 2017-08-24
    • 2013-06-24
    • 2018-09-19
    • 1970-01-01
    • 2015-03-13
    • 2020-05-01
    • 1970-01-01
    • 2017-02-23
    • 2019-03-14
    相关资源
    最近更新 更多