Scala 使用Gradle从单个源项目编译多个JAR
我正在使用Gradle构建一个用于Spark应用程序的库。这些库通常以Scala版本和Spark版本的多种组合提供。例如,例如-您可以看到在上有多个工件可用,通常针对每个Scala/Spark组合 我正在寻找一个优雅的方式来做这个建设 我看到了一个从同一个源构建多个JAR的解决方案,这正是我想要的,但它需要为每个组合手动编写子项目。(在链接的问题中,只构建了两个工件,我想构建至少九个,也许更多) 所以我的问题是——有没有更好的方法来做到这一点,或者上述解决方案是唯一的方法 更新:我看到了两个可能有用的Gradle插件,但还没有时间查看它们-下面的链接供感兴趣的人使用:Scala 使用Gradle从单个源项目编译多个JAR,scala,apache-spark,gradle,Scala,Apache Spark,Gradle,我正在使用Gradle构建一个用于Spark应用程序的库。这些库通常以Scala版本和Spark版本的多种组合提供。例如,例如-您可以看到在上有多个工件可用,通常针对每个Scala/Spark组合 我正在寻找一个优雅的方式来做这个建设 我看到了一个从同一个源构建多个JAR的解决方案,这正是我想要的,但它需要为每个组合手动编写子项目。(在链接的问题中,只构建了两个工件,我想构建至少九个,也许更多) 所以我的问题是——有没有更好的方法来做到这一点,或者上述解决方案是唯一的方法 更新:我看到了两个可能
您可以使用配置来完成这一点 尝试在要使用的依赖项版本组合的嵌套循环中声明配置。
然后,将各种依赖项组合分配给配置。
为所有配置创建归档任务。
最后,为所有配置声明工件 例如:
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")
}
}
}