56

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

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

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

9 回答 9

58

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

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

这应该适用于任何 groovy 脚本。不过,使用闭包或其他一些花哨的快捷方式,可能会有一种更“时髦”的方式。

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

于 2012-08-01T01:17:59.347 回答
43

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

请参阅用户指南

于 2012-08-01T22:36:52.890 回答
32

您可能正在寻找的是类似的东西:

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

然后,您的属性应该可以通过它们的名称直接访问。IE:

  println "$jdbcURL"
  println project.jdbcURL

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

于 2015-11-02T18:51:45.413 回答
11

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

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

    apply from: "version.properties"

就是这样!

于 2013-12-17T16:31:27.740 回答
10

下面是我如何在 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 完成的。

于 2012-11-19T18:32:28.670 回答
3

使用 GRADLE_USER_HOME 环境变量来设置 gradle 的主目录。放在那里 gradle.properties 文件并设置参数。

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

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

于 2015-07-05T15:27:05.147 回答
3

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

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 脚本并添加完成、引用检查等。

于 2017-02-10T18:52:29.023 回答
2

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

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

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

于 2016-09-17T03:43:40.373 回答
0

在您的任务(jar 或任何其他任务)中,您可以通过这种方式将任何文件包含到目标文件夹中

jar{

    //jar task related code

   from("src/main/......(source)") { 
     include 'xxx.properties' into('com/.....(destination)') 

   }

}
于 2019-09-24T19:10:32.567 回答