Maven或Gradle构建类型/变体

Bog*_*rac 10 java java-ee gradle maven

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

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

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

Bog*_*rac 4

言归正传,没有含糊的答案,以下是官方对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"
}
Run Code Online (Sandbox Code Playgroud)