如何在 Gradle 中包含属性文件?
例如在 Ant 中,我可以执行以下操作:
<property file="${basedir}/build.properties" />
如何在 Gradle 中包含属性文件?
例如在 Ant 中,我可以执行以下操作:
<property file="${basedir}/build.properties" />
您可以使用 java 语法来做到这一点,例如:
Properties props = new Properties()
InputStream ins = new FileInputStream("/path/file.properties")
props.load(ins)
ins.close()
这应该适用于任何 groovy 脚本。不过,使用闭包或其他一些花哨的快捷方式,可能会有一种更“时髦”的方式。
编辑:“in”是 groovy 中的保留字。变量不能这样命名,将其重命名为“ins”
我实际上建议使用 Gradle 的默认属性文件。如果将属性放在gradle.properties
与 相同的目录中build.gradle
,它们将自动可用。
请参阅用户指南。
您可能正在寻找的是类似的东西:
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
可能有一个原因(阴影?)为什么这样做是个坏主意?不知道为什么它不支持开箱即用或可以在其他地方找到。
要包含您的 .properties 文件,您可以使用以下内容:
apply from: "version.properties"
就是这样!
下面是我如何在 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 完成的。
使用 GRADLE_USER_HOME 环境变量来设置 gradle 的主目录。放在那里 gradle.properties 文件并设置参数。
https://docs.gradle.org/current/userguide/build_environment.html
用户主目录中的属性文件优先于项目目录中的属性文件。
除非您想将属性添加到项目中,否则接受的答案有效,因为这是第一个搜索结果,我将添加适用于 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 脚本并添加完成、引用检查等。
我非常想念 Ant 的这个特性,尤其是像work.dir=${basedir}/work
. 对于我使用的一些大型构建,它们为自动化测试执行大量环境设置,有些任务只需要用户和环境可配置的设置。简单的“gradle.properties”是不够的,尤其是对于跨多个项目共享的设置。
我整理了一个管理合理属性加载方案的示例 gradle 文件:load-properties.gradle。这让项目可以准确地定义它在default-properties.gradle
文件中使用的属性,并允许用户定义他们的本地设置来覆盖它们。因为读入的“属性”文件是 gradle 脚本,所以您可以在其中包含额外的逻辑,并且值不仅限于字符串。
此外,它允许通过将“-Penv=(env name)”参数传递给 gradle 来定义要使用的每个环境的属性文件(例如“mac”、“jenkins-machine”或“remote”)。
在您的任务(jar 或任何其他任务)中,您可以通过这种方式将任何文件包含到目标文件夹中
jar{
//jar task related code
from("src/main/......(source)") {
include 'xxx.properties' into('com/.....(destination)')
}
}