6

我正在尝试构建一个包含 Storm 项目的 Gradle 项目。为了在 Storm 上运行这个项目,我必须首先创建一个 JAR 文件并让 Storm 运行我的拓扑,例如

storm jar myJarFile.jar com.mypackage.MyStormMainClass

我遇到了问题,因为默认情况下,Gradle 在编译时和运行时都包含 Storm 依赖项。这会导致以下异常:

Exception in thread "main" java.lang.RuntimeException: Found multiple defaults.yaml resources. You're probably bundling the Storm jars with your topology jar.

给出的异常实际上很有帮助,并提示我们解决问题的根本原因。解决方案是在使用 Gradle 编译时包含 Storm 依赖项,但在生成最终 JAR 文件时不包含。

有谁知道如何解决这个问题?StackOverflow 上的其他帖子并没有解决问题。如果您粘贴代码,请确保它实际运行。

谢谢!

4

1 回答 1

1

下面我引用了我对storm-user mailing list 上一个类似线程的回答

就我而言,我为此选择使用 Gradle 的fatJar 插件

buildscript {
    repositories {
        mavenCentral()
        mavenRepo url: "http://clojars.org/repo"
    }
    dependencies {
        // see https://github.com/musketyr/gradle-fatjar-plugin
        classpath 'eu.appsatori:gradle-fatjar-plugin:0.2-rc1'
    }
}

// When using this plugin you can build a fat jar / uberjar with 'gradle fatJar'
apply plugin: 'fatjar'

dependencies {
    compile 'storm:storm:0.8.2', {
        ext {
            fatJarExclude = true
        }
    }
}

您通过以下方式构建胖罐:

$ gradle clean fatJar

最好的,迈克尔

PS:对于它的价值,我还写了一篇关于如何解决这个问题的博客,如上所述运行多节点风暴集群。该帖子包含可能对您有帮助也可能没有帮助的其他信息和陷阱。

于 2013-07-03T17:22:22.843 回答