【问题标题】:Is there a Groovy equivalent to Scala's literal identifiers?是否有与 Scala 的文字标识符等效的 Groovy?
【发布时间】:2013-07-19 17:16:49
【问题描述】:

Scala 的文字标识符在Need clarification on Scala literal identifiers (backticks) 中进行了描述。

背景:我正在将 Ant 构建系统转换为 Gradle。我们目前有一个文件dependencies.properties,其定义如下:

com.netflix.archaius.archaius-core.rev=latest.release

但是 Groovy 不喜欢属性名称中的 .-(因为它们是运算符)。有没有办法告诉 Groovy 将 .- 视为属性名称中的另一个字符,而不是更改属性名称和使用它们的所有内容?

【问题讨论】:

  • 可以this docthis discussion 帮忙吗?您可以在看到- 的地方很好地使用 GString 实现。例如:com.netflix.archaius.'archaius-core'.rev=${latest.release}
  • 为什么不直接将属性文件解析为属性文件,并在必要时对生成的地图进行一些简单的字符串替换?

标签: groovy gradle


【解决方案1】:

以下不提供文字标识符,如在 Scala 中,但它应该解决您的根本问题。鉴于此 dependencies.properties 文件:

foo=bar
com.netflix.archaius.archaius-core.rev=latest.release

然后是这个 Gradle 脚本:

ant.property(file: "dependencies.properties")

task go() {
    println ant."com.netflix.archaius.archaius-core.rev"
    println ant.foo
    println "done."
}

输出是(为简洁而编辑):

bash-3.2$ gradle go
latest.release
bar
done.

BUILD SUCCESSFUL

Total time: 4.26 secs

【讨论】:

  • 在我们的构建中,属性被放在project 范围内,所以project.'com.netflix.archaius.archaius-core.rev'project[''com.netflix.archaius.archaius-core.rev'] 都可以工作。
猜你喜欢
  • 2014-08-18
  • 2011-12-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-05-25
  • 2010-10-17
相关资源
最近更新 更多