gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:30:41 27 4
gpt4 key购买 nike

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

我正在寻找一种优雅的方式来进行此构建。

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

所以我的问题 - 有没有更好的方法来做到这一点,还是上面描述的解决方案是唯一的方法?

更新:我看到了两个可能有用的 Gradle 插件,但还没有时间检查它们 - 任何感兴趣的人都可以在下面找到链接:

https://github.com/ADTRAN/gradle-scala-multiversion-plugin

https://github.com/uklance/gradle-java-flavours

最佳答案

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

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

例如。:

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")
}
}
}
scalaDependenciessparkDepdendencies将只是您通常声明为依赖项的字符串,包括相应的版本号。
方法/闭包 buildConfigurationName你必须弄清楚自己;)
我现在正在编写代码,但我很确定如果你填写剩余的位,这会起作用。
您可能还需要另一个块来实际创建 mavenPublication s,但如果它可以创建 jar ,我认为你可以解决这个问题。

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

关于scala - 使用 Gradle 从单个源项目编译多个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52720283/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com