通过gradle创建许多具有不同配置文件的战争

时间:2015-02-17 17:03:14

标签: java gradle

我有gradle的java项目构建。我创建了4个配置文件每个配置文件都支持设置不同的数据库(postgresql,h2,mysql,mssql)。 Postgresql配置文件是默认的。 在一个命令gradle clean build之后我想要获得4个war文件,每个文件都在不同的配置文件中。 我怎样才能实现它?

我可以创建bash脚本并运行build命令四次(gradle clean build -Pdb = postgresql,gradle clean build -Pdb = h2,...)以及每次构建复制结果war文件之后但我不知道想要使用这个解决方案

我已经尝试过创建war,例如postgresql:

task createPostgresWar(type: War) {
        baseName = 'projectName_postgres'
        destinationDir = file("../build/libs")
    }

并且它工作正常但在每次这种类型的任务之前我还想用正确的配置文件重建项目。

2 个答案:

答案 0 :(得分:1)

假设您为创建战争定义了四个单独的任务,例如createPostgreWarcreateH2War等,您可以将这些任务作为依赖项添加到构建任务,如下所示:

build.dependsOn createPostgresWar, createH2War, <other war tasks>

现在运行gradle build会触发所有这些战争任务。

答案 1 :(得分:1)

我已经做了类似的事情,在一个版本中创建了几个罐子,但战争应该是相同的。将配置文件放在不同的目录中,如下所示:

常见的配置:

/src/META-INF/...

每个db的特殊配置:

/src/postgresql/META-INF/...
/src/h2/META-INF/...

现在,下面的脚本将构建四个不同的jar。每个创建的jar都将包含 / src / META-INF / 中的配置文件以及相应的 / src / xxx / META-INF / 中的配置文件。您可能需要将任务类型更改为War。

def customJar(String db) {
    task(db, type: Jar) {

        baseName = 'projectName'
        appendix = db
        destinationDir = file("../build/libs")

        from('src')
        from("src/${db}")

        def commonDir = new File(projectDir.absolutePath + "/src/META-INF/")
        def concreteDir = new File(projectDir.absolutePath + "/src/${db}/META-INF/")
        exclude {
            (!new File(concreteDir, it.file.name).absolutePath.equals(it.file.absolutePath)
                    && new File(concreteDir, it.file.name).isFile()
                    || !it.file.absolutePath.startsWith(concreteDir.absolutePath)
                    && !it.file.absolutePath.startsWith(commonDir.absolutePath))
        }
    }
}

artifacts {
    archives customJar("postgresql"),
            customJar("h2"),
            customJar("mysql"),
            customJar("mssql")
}