Создание файлов Storm JAR во время компиляции только в проекте Gradle

Я пытаюсь создать проект Gradle, содержащий проект Storm. Чтобы запустить этот проект в 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.

Данное исключение действительно полезно и указывает нам на основную причину проблемы. Решение состоит в том, чтобы включить зависимости Storm при компиляции с помощью Gradle, но не при генерации окончательного файла JAR.

Кто-нибудь знает, как это решить? Другие сообщения на StackOverflow не решили проблему. Если вы вставляете код, убедитесь, что он действительно работает.

Спасибо!


person Tim Biegeleisen    schedule 02.07.2013    source источник
comment
Сообщите нам, получен ли ответ на ваш вопрос.   -  person Michael G. Noll    schedule 02.10.2014


Ответы (1)


Ниже я цитирую свой ответ в аналогичную ветку в списке рассылки штормовых пользователей .

В моем случае я решил использовать для этой цели плагин fatJar для 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: Как бы то ни было, я также написал в блоге о том, как решить эту проблему, как описано выше, на Запуск многоузлового грозового кластера. Этот пост содержит дополнительную информацию и подводные камни, которые могут быть вам полезны, а могут и не помочь.

person Michael G. Noll    schedule 03.07.2013
comment
+1 за отличную запись в вашем блоге. Вы знаете, какие еще файлы JAR можно исключить? Я бы с удовольствием обрезал свою толстую банку, потому что сейчас она выглядит слишком толстой ... - person Dilum Ranatunga; 19.02.2014
comment
Пока я исключил только саму зависимость Storm, поэтому, основываясь на моем собственном практическом опыте, я не могу посоветовать вам, безопасно ли исключать и другие зависимости. - person Michael G. Noll; 24.02.2014