scala - 使用 Gradle 从单个源项目编译多个 jar
问题描述
我正在使用 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
。您必须自己弄清楚
的方法/关闭;)
我现在正在从臀部编码,但我很确定如果您填写剩余的位,这将起作用。
您可能还需要另一个块来实际创建s,但如果它可以创建 Jars,我认为您可以解决这个问题。sparkDepdendencies
buildConfigurationName
mavenPublication
我有一个有点相似的工作示例,从名称列表中声明多个源集和工件,这也可能有帮助。
在这里找到它:https ://github.com/thokari/gradle-workshop/blob/master/examples/09-multiple-artifacts/build.gradle
推荐阅读
- .net - 如何让 elasticsearch 为通过 REST 创建的对象创建唯一 ID?
- sql - BigQuery - 过滤器从嵌套表中无效
- java - 我的应用程序无法在某些手机上运行,有时
- python - 如何使用 list.split() 从用户获取确切数量的输入到列表
- python - (pandas json_normalize) 嵌套 Json
- java - 将带有嵌套字符的字符串转换为特定的json格式,如java中的格式
- python-3.x - Python为浮点加法返回错误的结果
- powershell - 如何使用 power shell 脚本获取 IIS 站点物理路径和绑定详细信息
- javascript - 使用 dialogflow 将多个参数写入 Firestore 数据库
- python - python脚本中发布请求的空正文错误