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 メーリング リストの同様のスレッドに対する私の回答を引用します。

私の場合、その目的のために 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
        }
    }
}

次の方法でファット jar をビルドします。

$ gradle clean fatJar

ベスト、マイケル

PS: この問題を解決する方法については、上記のマルチノード ストーム クラスターの実行で説明したブログにも書いています。その投稿には、役立つ場合とそうでない場合がある追加の情報と落とし穴が含まれています。

于 2013-07-03T17:22:22.843 に答える