我需要三种口味:
fake
staging
prod
fake
将提供类似FakeUser
,FakeUserDb
的类 - 这些类不编译到{{1}中非常重要味道。
prod
和prod
完全相同,只是我需要将不同的staging
编译为String url
vs prod
。
所以,我需要创建一个"抽象" staging
和real
继承的prod
风格。
这可以通过android gradle插件轻松完成,但是如何在纯Java gradle模块中完成?
答案 0 :(得分:3)
对于你想要的每种口味
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)类似的东西:
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插件来执行此操作: