使用Gradle从单个源项目编译多个jar

Eya*_*yal 5 scala gradle apache-spark

我正在使用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-flavors

Tho*_*sch 1

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

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

例如:

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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和只是您通常声明为依赖项的字符串,包括各自的版本号scalaDependencies。你必须自己弄清楚 方法/闭包;) 我现在正在从臀部编码这个,但我相当确定如果你填写剩余的位,这将起作用。 您可能还需要另一个块来实际创建s,但如果它可以工作到创建 Jars,我认为您可以解决这个问题。sparkDepdendencies
buildConfigurationName

mavenPublication

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