繁体   English   中英

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

[英]Compile multiple jars from single source project using Gradle

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

我正在寻找一种优雅的方式来做这个构建。

我在这个问题中看到了一个从同一个源构建多个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 ,但如果它能够创建Jars,我认为您可以解决这个问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM