小编典典

Maven或Gradle构建类型/变体

java

Android Gradle插件增加了对构建类型和构建变体的支持,可让您选择要在构建步骤中构建应用程序的版本(例如,调试或发布)。

这对于Gradle项目是非常有用的功能,因为您可以拥有两个版本的应用程序,这些版本在某些情况下的行为可能不同,或者具有不同的配置文件或属性,具体取决于构建的类型。

现在,我的问题是:Maven或Gradle的非Android Java项目是否具有类似的功能/实现?我正在专门寻找Java
Web应用程序,但我想这个问题的目标范围也可能更大。


阅读 207

收藏
2020-11-16

共1个答案

小编典典

在没有模糊答案的情况下将其付诸实践,这是Luke Daley (Gradleware Engineer)对此事的官方回应:

这是我们正在积极努力的事情。我们正在以一种通用的方式来支持变体的概念,以便跨领域采用一致的方法。这是一个深刻的,深刻的变化,因此涉及很多方面。

您可以期望在Gradle 2.5及更高版本中看到此方面的内容。

以后的编辑: 通过使用SourceSets而不是Build Types&Variants,我终于能够在JavaEE
webapp项目上进行此工作。考虑到SourceSets已经存在了很长时间,显然您早就可以这样做了……但是,甚至gradle工程师也无法正确地解释如何做到这一点……

无论如何,请查看build.gradle下面的代码,其中我们为两个SourceSet使用相同的输出目录,然后指定要从中构建WAR插件的位置:

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"
}
2020-11-16