[英]Sbt assembly - Multiple jars with different Main classes from single project
[英]Compile multiple jars from single source project using Gradle
我正在使用Gradle构建一个旨在用于Spark应用程序的库。 这些库通常以Scala版本和Spark版本的多种组合提供。 例如,对于spark-testing-base - 你可以看到mvn cntrl上有多个工件可用,通常用于每个Scala / Spark组合。
我正在寻找一种优雅的方式来做这个构建。
我在这个问题中看到了一个从同一个源构建多个jar的解决方案,这就是我想要的,但它将涉及为每个组合手动编写子项目。 (在链接的问题中,只构建了两个工件,我想构建至少九个,可能更多)。
所以我的问题 - 是否有更好的方法来做到这一点,或者上面描述的解决方案是唯一的方法?
更新:我看到两个可能有用的Gradle插件,但还没有时间检查它们 - 下面链接给任何感兴趣的人:
您可以使用配置完成此操作。
尝试在嵌套循环中声明要构建的依赖项的版本组合的配置。
然后,将各种依赖关系组合分配给配置。
为所有配置创建归档任务。
最后,声明所有配置的工件。
例如:
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,我认为您可以解决这个问题。
我有一个类似的工作示例,从名称列表中声明多个sourceSets和工件,这可能也有帮助。
在这里找到它: https : //github.com/thokari/gradle-workshop/blob/master/examples/09-multiple-artifacts/build.gradle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.