使用Gradle

时间:2018-10-09 11:44:47

标签: scala apache-spark gradle

我正在使用Gradle构建打算在Spark应用程序中使用的库。通常可以在Scala版本和Spark版本的多种组合中使用此类库。例如,对于spark-testing-base-您可以看到mvn cntrl上有多个工件,通常对于每个Scala / Spark组合都是如此。

我正在寻找一种优雅的方式进行构建。

我在this question中看到了一种从同一源构建多个jar的解决方案,这是我想要的,但是它将涉及为每种组合手动编写子项目。 (在链接的问题中,仅构建了两个工件,我想至少构建九个工件)。

所以我的问题-有更好的方法吗?还是上述解决方案是唯一的方法?

1 个答案:

答案 0 :(得分:0)

您也许可以使用配置来完成此操作。

尝试在嵌套循环中声明要使用的依赖项的版本组合的配置。
然后,将各种依赖项组合分配给配置。
为所有配置创建存档任务。
最后,为所有配置声明工件。

例如:

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")
        }
    }
}

scalaDependenciessparkDepdendencies只是您通常声明为依赖项的字符串,包括各自的版本号。
方法/结束语buildConfigurationName您必须弄清楚自己;)
我现在正在从臀部进行编码,但是我敢肯定,如果您填写剩余的部分,这将起作用。
您可能还需要另一个块来实际创建mavenPublication,但是如果它可以创建Jars,那么我认为您可以解决。

我有一个类似的工作示例,从名称列表中声明了多个sourceSet和工件,这可能也有帮助。
在这里找到它:https://github.com/thokari/gradle-workshop/blob/master/examples/09-multiple-artifacts/build.gradle