通过功能在Java项目中使用Gradle生成影子罐

时间:2019-05-31 14:35:32

标签: gradle

我尝试使用Java插件功能(https://docs.gradle.org/5.3-rc-1/userguide/feature_variants.html)声明相同依赖项的2个版本,并在最后生成2个jar:

java {
    registerFeature('v1') {
        usingSourceSet(sourceSets.main)
    }

    registerFeature('v2') {
        usingSourceSet(sourceSets.main)
    }
}

dependencies {
    compileOnly project(':djobi-core')

    v1Implementation(group: 'org.elasticsearch', name: 'elasticsearch-spark-13_' + scalaVersion, version:'6.2.2') {
        exclude group: "org.scala-lang"
    }

    v2Implementation(group: 'org.elasticsearch', name: 'elasticsearch-spark-13_' + scalaVersion, version:'6.3.2') {
        exclude group: "org.scala-lang"
    }
}

ShadowJar {

}

但是它仅生成1,这是使用feature功能的好方法吗?

1 个答案:

答案 0 :(得分:1)

默认任务shadowJar使用runtime配置,请参见docs-

为了隐藏配置v1v2,我们可以定义两个ShadowJar类型的新任务(需要配置)。

实际上,v1v2可以定义为“常规”配置,也就是说,避免使用特征变量(这比较简单;此外,在尝试使用shadowJar和{{上面的1}},我们有一个错误(v1Implementation)。

请参见下面的编辑示例;可以使用Resolving configuration 'v1Implementation' directly is not allowed来构建。


gradle shadowJar1 shadowJar2