Android Gradle插件增加了对构建类型和构建变体的支持,可让您选择要在构建步骤中构建应用程序的版本(例如,调试或发布)。
这对于Gradle项目是非常有用的功能,因为您可以拥有两个版本的应用程序,这些版本在某些情况下的行为可能不同,或者具有不同的配置文件或属性,具体取决于构建的类型。
现在,我的问题是:Maven或Gradle的非Android Java项目是否具有类似的功能/实现?我正在专门寻找Java Web应用程序,但我想这个问题的目标范围也可能更大。
在没有模糊答案的情况下将其付诸实践,这是Luke Daley (Gradleware Engineer)对此事的官方回应:
Luke Daley (Gradleware Engineer)
这是我们正在积极努力的事情。我们正在以一种通用的方式来支持变体的概念,以便跨领域采用一致的方法。这是一个深刻的,深刻的变化,因此涉及很多方面。 您可以期望在Gradle 2.5及更高版本中看到此方面的内容。
这是我们正在积极努力的事情。我们正在以一种通用的方式来支持变体的概念,以便跨领域采用一致的方法。这是一个深刻的,深刻的变化,因此涉及很多方面。
您可以期望在Gradle 2.5及更高版本中看到此方面的内容。
以后的编辑: 通过使用SourceSets而不是Build Types&Variants,我终于能够在JavaEE webapp项目上进行此工作。考虑到SourceSets已经存在了很长时间,显然您早就可以这样做了……但是,甚至gradle工程师也无法正确地解释如何做到这一点……
无论如何,请查看build.gradle下面的代码,其中我们为两个SourceSet使用相同的输出目录,然后指定要从中构建WAR插件的位置:
build.gradle
apply plugin: 'war' sourceSets { main { output.resourcesDir = 'build/resources' output.classesDir = 'build/classes' } debug { java { compileClasspath += main.output runtimeClasspath += main.output } output.resourcesDir = 'build/resources' output.classesDir = 'build/classes' } } task assembleDebugWar(type: War) { from sourceSets.debug.output archiveName "ROOT.war" } task assembleReleaseWar(type: War) { from sourceSets.main.output archiveName "ROOT.war" }