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

Scala 使用Gradle从单个源项目编译多个JAR,scala,apache-spark,gradle,Scala,Apache Spark,Gradle,我正在使用Gradle构建一个用于Spark应用程序的库。这些库通常以Scala版本和Spark版本的多种组合提供。例如,例如-您可以看到在上有多个工件可用,通常针对每个Scala/Spark组合 我正在寻找一个优雅的方式来做这个建设 我看到了一个从同一个源构建多个JAR的解决方案,这正是我想要的,但它需要为每个组合手动编写子项目。(在链接的问题中,只构建了两个工件,我想构建至少九个,也许更多) 所以我的问题是——有没有更好的方法来做到这一点,或者上述解决方案是唯一的方法 更新:我看到了两个可能

我正在使用Gradle构建一个用于Spark应用程序的库。这些库通常以Scala版本和Spark版本的多种组合提供。例如,例如-您可以看到在上有多个工件可用,通常针对每个Scala/Spark组合

我正在寻找一个优雅的方式来做这个建设

我看到了一个从同一个源构建多个JAR的解决方案,这正是我想要的,但它需要为每个组合手动编写子项目。(在链接的问题中,只构建了两个工件,我想构建至少九个,也许更多)

所以我的问题是——有没有更好的方法来做到这一点,或者上述解决方案是唯一的方法

更新:我看到了两个可能有用的Gradle插件,但还没有时间查看它们-下面的链接供感兴趣的人使用:


您可以使用配置来完成这一点

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

例如:

scalaDependencies
sparkdepdencies
只是您通常声明为依赖项的字符串,包括相应的版本号。
方法/closure
buildConfigurationName
您必须自己弄清楚;)
我现在正在从hip开始编写代码,但我相当肯定,如果您填写剩余的部分,这将起作用。
您可能还需要另一个块来实际创建
mavenPublication
s,但是如果它能够创建jar,我认为您可以解决这个问题

我有一个类似的工作示例,从名称列表中声明多个源集和工件,这可能也会有所帮助。

在这里找到它:

可能会动态创建任务?当我尝试让这个示例工作时,我得到一个错误-“无法获取配置的未知属性“compile”:父项目:类型为org.gradle.api.internal.artifacts.configurations.DefaultConfiguration的output_name_2.11_2.2”。“compile”是为我的父\u项目定义的-我缺少什么?
compile
是任何拥有它的项目中的默认配置的名称,例如在声明
apply plugin:'java'
之后。看见
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")
        }
    }
}