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

标签 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中定义的任何属性的方法。

例如。
gradle build -PjdbcJarFile=new/path

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

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

我该如何解决?

Gradle版本为2.12。

最佳答案

认为您必须更改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'

关于gradle - 从命令行覆盖gradle project.ext参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36729621/

相关文章:

gradle - spring-boot-starter-jetty 1.4.x.RELEASE缺少EmbeddedServletContainerFactory

groovy - Spock 框架每个 'then' block 只允许一个异常条件

java - 使用变量的值作为枚举值

Android Gradle : Dynamically change versionName at build time

grails - 在 BootStrap 中使用 createLink

android - 即使下载了安装工具,也出现未安装错误

java - OpenShift Gradle 失败并出现 java.net.BindException : Permission denied

android - 我的 Target SDK 版本是 29,MinSdk 版本是 15。帮我提供合适的 firebaseUI 依赖

command-line - 子项目的gradle命令行属性

testing - 如何模拟 'new' 运算符