Скомпилируйте несколько jar-файлов из одного исходного проекта, используя Gradle - PullRequest
0 голосов
/ 09 октября 2018

Я использую Gradle для создания библиотеки, предназначенной для использования в приложениях Spark.Такие библиотеки обычно доступны в нескольких комбинациях версии Scala и версии Spark.Например, для spark-testing-base - вы можете видеть, что на mvn cntrl доступно несколько артефактов, часто для каждой комбинации Scala / Spark.

Яищу элегантный способ сделать эту сборку.

Я видел в этот вопрос решение для создания нескольких jar-файлов из одного и того же источника, и это то, что я хочу, но это потребует написания вручнуюподпроекты для каждой комбинации.(в связанном вопросе построено только два артефакта, и я хочу построить как минимум девять, а может и больше).

Итак, мой вопрос - есть ли лучший способ сделать это или решение, описанное вышеединственный способ?

ОБНОВЛЕНИЕ: Я видел два плагина Gradle, которые могли бы быть полезными, но еще не успели их проверить - ссылки ниже для всех, кто интересуется:

https://github.com/ADTRAN/gradle-scala-multiversion-plugin

https://github.com/uklance/gradle-java-flavours

1 Ответ

0 голосов
/ 29 ноября 2018

Вы могли бы сделать это, используя конфигурации.

Попробуйте объявить конфигурации во вложенных циклах для комбинаций версий зависимостей, с которыми вы хотите построить.
Затем назначьте различные комбинации зависимостей дляконфигурации.
Создание задач архивирования для всех конфигураций.
Наконец, объявляйте артефакты для всех конфигураций.

Например:

scalaDependencies.each { scalaDep ->
    sparkDependencies.each { sparkDep ->

        def configurationName = buildConfigurationName(scalaDep, sparkDep)

        configurations.create(configurationName)
        configurations."$configurationName" {
            extendsFrom compile // this would be the simplest case
        }

        dependencies {
            "$configurationName"(scalaDep)
            "$configurationName"(sparkDep)
        }

        task("${configurationName}Jar", type: Jar) {
            from "$configurationName"
        }

        artifacts {
            "$configurationName"("${configurationName}Jar")
        }
    }
}

scalaDependencies и sparkDepdendencies будет просто строкой, которую вы обычно объявляете как зависимости, включая соответствующие номера версий.
Метод / закрытие buildConfigurationName вам придется самостоятельно разобраться;)
Я кодирую это прямо сейчас, но я вполне уверен, что это сработает, если вы заполните все оставшиеся биты.
Вам также может понадобиться еще один блок для фактического создания mavenPublication s, но если он сработает до момента создания банок, я думаю, вымогу решить это.

У меня есть рабочий пример, который несколько похож, объявляя несколько исходных наборов и артifacts из списка имен, которые также могут быть полезны.
Найдите его здесь: https://github.com/thokari/gradle-workshop/blob/master/examples/09-multiple-artifacts/build.gradle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...