Gradle - 包含属性文件

时间:2012-07-31 21:37:15

标签: gradle

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

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

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

9 个答案:

答案 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)

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

要包含.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)') 

   }

}