我正在使用Gradle构建打算在Spark应用程序中使用的库。通常可以在Scala版本和Spark版本的多种组合中使用此类库。例如,对于spark-testing-base-您可以看到mvn cntrl上有多个工件,通常对于每个Scala / Spark组合都是如此。
我正在寻找一种优雅的方式进行构建。
我在this question中看到了一种从同一源构建多个jar的解决方案,这是我想要的,但是它将涉及为每种组合手动编写子项目。 (在链接的问题中,仅构建了两个工件,我想至少构建九个工件)。
所以我的问题-有更好的方法吗?还是上述解决方案是唯一的方法?
答案 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")
}
}
}
scalaDependencies
和sparkDepdendencies
只是您通常声明为依赖项的字符串,包括各自的版本号。
方法/结束语buildConfigurationName
您必须弄清楚自己;)
我现在正在从臀部进行编码,但是我敢肯定,如果您填写剩余的部分,这将起作用。
您可能还需要另一个块来实际创建mavenPublication
,但是如果它可以创建Jars,那么我认为您可以解决。
我有一个类似的工作示例,从名称列表中声明了多个sourceSet和工件,这可能也有帮助。
在这里找到它:https://github.com/thokari/gradle-workshop/blob/master/examples/09-multiple-artifacts/build.gradle