Gradle – 包含属性文件

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

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

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

你可以使用java语法来完成,例如:

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

这应该在任何groovy脚本工作。 尽pipe如此,可能会有更多的“常规”方法,使用闭包或其他一些奇特的捷径。

我真的会推荐使用Gradle的默认属性文件。 如果将属性放在与gradle.properties相同的目录中,它们将自动可用。

请参阅用户指南 。

你可以期待的是这样的:

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

那么你的物业应该可以直接通过他们的名字进入。 即:

  println "$jdbcURL" println project.jdbcURL 

这可能是一个原因(影子?)为什么这是一个坏主意呢? 不知道为什么它不支持开箱即可或可以find其他地方。

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

要包含你的.properties文件,你可以使用像这样的东西:

  apply from: "version.properties" 

就是这样!

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

使用GRADLE_USER_HOME envvariables来设置gradle的主目录。 把那里的gradle.properties文件和设置参数。

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

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

我一直非常想念Ant的这个特性,特别是像work.dir=${basedir}/work这样的work.dir=${basedir}/workreplace。 随着一些与我一起工作的大型构build,为自动化testing执行大量的环境设置,有一些任务只需要用户和环境可configuration的设置。 简单的“gradle.properties”还不够,特别是对于跨多个项目共享的设置。

我把一个示例gradle文件放在一起,pipe理一个合理的属性加载scheme: load-properties.gradle 。 这使项目可以准确定义它在default-properties.gradle文件中使用default-properties.gradle ,并允许用户定义其本地设置以覆盖它们。 由于读入的“属性”文件是gradle脚本,因此可以在其中包含额外的逻辑,并且值不仅限于string。

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

接受的答案是有效的,除非你想添加属性到项目中,因为这是我添加我的解决scheme的第一个search结果,它在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"); 

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