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

标签 scala apache-spark gradle

我正在使用 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/

相关文章:

validation - 通过 for-comprehension 线程 `Try` s

python - 如何在同一个 Spark 项目中同时使用 Scala 和 Python?

gradle - 从一台 PC 移动到另一台(window 到 mac)时出现 flutter 项目构建错误

scala - 将 Akka HTTP 重定向到 HTTPS

json - Play框架Json序列化失败

java - 为什么SparkSQL中org.apache.spark.sql.types.DecimalType的最大精度值为38?

apache-spark - 如何优化 Apache Spark 应用程序中的 shuffle 溢出

apache-spark - spark-通过文件提交配置

spring - java 9模块从A和B读取包X

android - 如何为 React Native 定义全局 gradle 路径