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