首页 文章

Gradle - 包含属性文件

提问于
浏览
49

我如何在Gradle中包含属性文件?

例如在Ant中,我可以执行以下操作:

<property file="${basedir}/build.properties" />

8 回答

  • 10

    你可以使用java语法来做到这一点,例如:

    Properties props = new Properties()
    InputStream ins = new FileInputStream("/path/file.properties")
    props.load(ins)
    ins.close()
    

    这应该适用于任何groovy脚本 . 尽管如此,使用闭包或其他一些奇特的捷径可能会有一种更“常规”的方式 .

    编辑:“in”是groovy中的保留字 . 变量不能这样命名,将其重命名为“ins”

  • 39

    我实际上建议使用Gradle的默认属性文件 . 如果将 gradle.properties 中的属性放在与 build.gradle 相同的目录中,它们将自动可用 .

    user guide .

  • 26

    您可能正在寻找的是:

    Properties props = new Properties()
        props.load(new FileInputStream("$project.rootDir/profile/"+"$environment"+".properties"))
        props.each { prop ->
          project.ext.set(prop.key, prop.value)
        }
    

    然后,您的 property 可以通过他们的名字直接访问 . 即:

    println "$jdbcURL"
      println project.jdbcURL
    

    这可能是一个原因(影子?)为什么这样做是个坏主意?不知道为什么它不支持开箱即用,或者可以在其他地方找到 .

  • 56

    对于Gradle 1.x(在Gradle 2.x中弃用)

    要包含.properties文件,您可以使用以下内容:

    apply from: "version.properties"
    

    就是这样!

  • 2

    以下是我在Gradle构建的.jar中包含.csv文件的方法:

    sourceSets {
      main {
        java {
          srcDir 'src/main/java'
          output.classesDir   = 'build/classes/main'      
        }
        resources {
          srcDir 'src/main/resources'
          include '*.csv'
          output.resourcesDir = 'build/resources/main'
        }
      }
    }
    

    然后,当我的应用程序加载资源时,这是独立于Gradle完成的 .

  • 3

    使用GRADLE_USER_HOME env变量设置gradle的主目录 . 把gradle.properties文件放在那里并设置参数 .

    https://docs.gradle.org/current/userguide/build_environment.html

    用户主目录中的属性文件优先于项目目录中的属性文件 .

  • 11

    我一直非常想念Ant的这个功能,尤其是像 work.dir=${basedir}/work 这样的属性替换 . 我使用的一些大型构建为自动化测试执行了大量环境设置,有些任务只需要用户和环境可配置的设置 . 简单的"gradle.properties"是不够的,特别是对于跨多个项目共享的设置 .

    我把一个示例gradle文件放在一起,管理一个合理的属性加载方案:load-properties.gradle . 这使项目可以准确定义它在 default-properties.gradle 文件中使用的属性,并允许用户定义其本地设置以覆盖它们 . 因为读入的"property"文件是gradle脚本,所以可以在其中包含额外的逻辑,并且值不仅限于字符串 .

    此外,它允许通过将“-Penv =(env name)”参数传递给gradle来定义要使用的每个环境属性文件(例如“mac”或“jenkins-machine”或“remote”) .

  • 2

    除非您想要将属性添加到项目中,否则接受的答案将起作用,因为这是我将添加我的解决方案的第一个搜索结果,该解决方案适用于gradle 3.x.一个简单的方法是通过 Ant .

    ant {
        property(file: 'properties.file')
    }
    

    如果您需要将属性转换为Camel Case以便在脚本中轻松访问(请记住基于点的语法预期并且实际对象存在于gradle中):

    println "property value:{dot.property.from.file}" //this will fail.
    def camelCaseProperty = project.getProperties().get("dot.property.from.file")
    println "camelCaseProperty:${camelCaseProperty}"  //this wont fail
    

    如果未指定,则需要默认值:

    def propertyWithDefault = project.getProperties().get("dot.property.from.file","defaultValue");
    

    通过使用此方法,至少使用IntelliJ / Android Studio,IDE将链接您的属性文件和gradle脚本并添加完成,引用检查等 .

相关问题