How to imitate AndroidFlavors product in a pure java gradle module?

I need three flavors:

  • fake
  • staging
  • prod

fakewill provide classes like FakeUser, FakeUserDb- it is very important that these classes are not compiled into flavor prod.

prodand stagingare completely identical, except for the fact that I need to compile another String urlin prodvs staging.

So, I need to create an “abstract” realtaste that inherits both prod, and staging.

This can be done easily with the android gradle plugin, but how can I do this in a clean java gradle module?

+4
source share
2 answers

- :

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

All Articles