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

时间:2016-05-17 14:41:28

标签: java android gradle android-gradle

我需要三种口味:

  • fake
  • staging
  • prod

fake将提供类似FakeUserFakeUserDb的类 - 这些类编译到{{1}中非常重要味道。

prodprod完全相同,只是我需要将不同的staging编译为String url vs prod

所以,我需要创建一个"抽象" stagingreal继承的prod风格。

这可以通过android gradle插件轻松完成,但是如何在纯Java gradle模块中完成?

2 个答案:

答案 0 :(得分:3)

对于你想要的每种口味

  1. 创建SourceSet以便编译
  2. 使compile Configuration扩展主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 } 配置(有关java插件创建的每个SourceSet的配置,请参阅表45.6 here
  3. 创建JarTask(使用flavor作为分类器)
  4. Publish the jar artifact因此可以通过classifier
  5. 引用风味

    类似的东西:

    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'
    }
    

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

    {{1}}

答案 1 :(得分:2)

我写了一个gradle-java-flavors插件来执行此操作: