只在Gradle项目中编译Storm JARs编译时间

Tim*_*sen 6 gradle maven apache-storm

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

storm jar myJarFile.jar com.mypackage.MyStormMainClass
Run Code Online (Sandbox Code Playgroud)

我遇到了问题,因为默认情况下,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.
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Mic*_*oll 1

下面我引用了我对storm-user邮件列表上类似帖子的回答

就我而言,我选择使用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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式构建 fat jar:

$ gradle clean fatJar
Run Code Online (Sandbox Code Playgroud)

最好的,迈克尔

PS:值得一提的是,我还在博客中介绍了如何解决此问题,如上所述,运行多节点风暴集群。该帖子包含其他信息和陷阱,可能对您有帮助,也可能没有帮助。