gpt4 book ai didi

java - 如何在纯 java gradle 模块中模拟 Android 的 productFlavors?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:41 33 4
gpt4 key购买 nike

我需要三种口味:

  • 假的
  • 暂存
  • 产品

fake 将提供像 FakeUserFakeUserDb 这样的类 - 非常重要的是,这些类被编译成prod 风格。

prodstaging 完全相同,只是我需要将不同的 String url 编译成 prodstaging 对比。

因此,我需要创建一个 prodstaging 继承的“抽象”real 风格。

这可以使用 android gradle 插件轻松完成,但我如何在纯 java gradle 模块中完成它?

最佳答案

对于您想要的每种口味

  1. 创建 SourceSet所以它会被编译
  2. 进行${flavour}编译 Configuration扩展主要的compile 配置(参见表 45.6 here 了解由 java 插件创建的每个 SourceSet 的配置)
  3. 创建 JarTask (使用 flavor 作为分类器)
  4. Publish the jar artifact所以味道可以通过 classifier 引用

类似于:

def flavours = ['fake', 'staging', 'prod']
flavours.each { String flavour ->
SourceSet sourceSet = sourceSets.create(flavour)
sourceSet.java {
srcDirs 'src/main/java', "src/$flavour/java"
}
sourceSet.resources {
srcDirs 'src/main/resources', "src/$flavour/resources"
}
Task jarTask = tasks.create(name: "${flavour}Jar", type: Jar) {
from sourceSet.output
classifier flavour
}
configurations.getByName("${flavour}Compile").extendsFrom configurations.compile
configurations.getByName("${flavour}CompileOnly").extendsFrom configurations.compileOnly
configurations.getByName("${flavour}CompileClasspath").extendsFrom configurations.compileClasspath
configurations.getByName("${flavour}Runtime").extendsFrom configurations.runtime

artifacts {
archives jarTask
}
assemble.dependsOn jarTask
}

然后,要在另一个项目中引用其中一种风格,您可以执行以下操作之一:

dependencies {
compile project(path: ':someProject', configuration: 'fakeCompile')
compile project(path: ':someProject', configuration: 'fakeRuntime')
compile 'someGroup:someProject:1.0:fake'
compile group: 'someGroup', name: 'someProject', version: '1.0', classifier: 'fake'
}

关于java - 如何在纯 java gradle 模块中模拟 Android 的 productFlavors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37279281/

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