我正在尝试构建一个包含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上的其他帖子没有解决问题。如果您粘贴代码,请确保它实际运行。
谢谢!
答案 0 :(得分:1)
下面我引用an answer of mine到similar thread on the storm-user mailing list。
就我而言,我选择将fatJar plugin用于Gradle用于此目的。
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:对于它的价值,我还在博客上写了如何解决这个问题,如上文Running a Multi-Node Storm Cluster所述。该帖子包含额外的信息和陷阱,可能对您有帮助,也可能没有帮助。