从命令行覆盖gradle project.ext params

时间:2016-04-19 21:15:39

标签: gradle groovy

我有一个gradle构建,我使用另一个gradle文件中的属性:

的build.gradle

apply from: "props.gradle"

props.gradle 只是一个具有groovy语法的文件中的一组属性:

ext {
    jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}

稍后在构建中,我可以像这样访问这些属性:

project.property("jdbcJarFile")

我需要的是一种从命令行覆盖props.gradle中定义的任何属性的方法。

E.g。

gradle build -PjdbcJarFile=new/path

但是当我尝试这个时,我仍然在props.gradle中声明了值。

我需要能够覆盖每个属性,并且我在该文件中有数十个属性。手动检查每个属性不是一个选项。

我该如何解决这个问题?

Gradle版本是2.12。

1 个答案:

答案 0 :(得分:1)

认为您必须更改props.gradle以检查属性,并设置ext.jdbcJarFile,如果它未在命令行中设置,即:

if(!hasProperty('jdbcJarFile')) {
    ext.jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
}

ext {
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}

要以更清晰的方式设置此项,以便在您拥有大量属性时更改props.gradle

ext {
    jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}

类似于:

def defaultProperty(String name, defaultValue) {
    if(!hasProperty(name)) {
        ext."$name" = defaultValue
    }
}

defaultProperty 'jdbcJarFile', '/jdbc/lib/ojdbc6.jar'
defaultProperty 'system_oracle_driver', 'oracle.jdbc.driver.OracleDriver'
defaultProperty 'system_db_admin_user', 'system'