从命令行覆盖 gradle project.ext 参数

dds*_*dds 4 groovy gradle

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

构建.gradle

apply from: "props.gradle"
Run Code Online (Sandbox Code Playgroud)

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

ext {
    jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}
Run Code Online (Sandbox Code Playgroud)

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

project.property("jdbcJarFile")
Run Code Online (Sandbox Code Playgroud)

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

例如

gradle build -PjdbcJarFile=new/path
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,我仍然得到props.gradle.

我需要能够覆盖每个属性,并且该文件中有数十个属性。此处无法手动检查每个属性。

我该如何解决这个问题?

Gradle 版本是 2.12。

tim*_*tes 5

认为您必须更改您的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"
}
Run Code Online (Sandbox Code Playgroud)

当您有大量属性时,要以更简洁的方式进行设置,请更改props.gradle

ext {
    jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}
Run Code Online (Sandbox Code Playgroud)

对于类似的事情:

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'
Run Code Online (Sandbox Code Playgroud)