Gradle - 包含属性文件

Hak*_*kar 50 gradle

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

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

<property file="${basedir}/build.properties" />
Run Code Online (Sandbox Code Playgroud)

Dav*_*que 57

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

Properties props = new Properties()
InputStream ins = new FileInputStream("/path/file.properties")
props.load(ins)
ins.close()
Run Code Online (Sandbox Code Playgroud)

这应该适用于任何groovy脚本.尽管如此,使用闭包或其他一些奇特的捷径可能会有一种更"常规"的方式.

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

  • @djangofan Gradle使用可以使用Java语法的Groovy ..即你可以直接在build.gradle中使用它 (24认同)
  • 是的,但当问题被明确标记为"Gradle"问题时,这是一个"Java"答案.如果您的问题是"我如何在Java中加载属性文件",那么这是正确的答案,但Stack Overflow上有很多这样的答案.我想说应该编辑这个答案,以便在build.gradle文件的上下文中显示它. (4认同)

小智 40

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

请参阅用户指南.

  • 此解决方案可能不适用于动态属性. (7认同)
  • @ataulm一开始可能看起来反直觉,但是用户主目录中的属性*do*覆盖项目目录中的属性.这是[相关文档](https://gradle.org/docs/current/userguide/build_environment.html).在实践中,这被证明是一件好事*. (4认同)
  • 但请注意,这些属性可以被用户主目录中的 gradle.properties 文件覆盖。 (2认同)

icy*_*sor 27

您可能正在寻找的是:

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

然后,您的财产可以通过他们的名字直接访问.即:

  println "$jdbcURL"
  println project.jdbcURL
Run Code Online (Sandbox Code Playgroud)

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


dja*_*fan 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'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,当我的应用程序加载资源时,这是独立于Gradle完成的.

  • 我在这里错过了什么吗?据我所知,问题是关于将属性字符串作为变量导入到Gradle构建脚本_中,而这个答案告诉我们如何在一个构建的工件中包含一个文件.我错了吗? (2认同)

小智 11

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

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

    apply from: "version.properties"
Run Code Online (Sandbox Code Playgroud)

就是这样!

  • 看起来这将在gradle 2.0中被弃用."不推荐使用按需创建属性(又称动态属性),并计划在Gradle 2.0中删除.请阅读http://gradle.org/docs/current/dsl /org.gradle.api.plugins.ExtraPropertiesExtension.html获取有关动态属性替换的信息." (11认同)
  • 这不起作用 (2认同)