【问题标题】:How to use a variable defined in build.gradle in .java file如何在 .java 文件中使用 build.gradle 中定义的变量
【发布时间】:2019-05-29 02:23:55
【问题描述】:

我有一个变量,比如 myVar,在 build.gradle 中定义。我想在某个 .java 文件中访问这个变量,该文件是同一个项目的一部分。我知道我们可以在 android 中使用 buildTypes 块来做到这一点。但是我在IntelliJ IDEA中有一个非android项目,所以不能用。我确实遇到了一个插件https://github.com/mfuerstenau/gradle-buildconfig-plugin,它可以让我做到这一点。 但我不想依赖 3rd 方插件。我还通过将值设置为系统属性然后使用System.getenv() 在.java 中访问它来了解如何实现这一点。但是,我不想更改系统级的东西。知道怎么做吗?

【问题讨论】:

  • 将此变量值存储到一些由 processResources 复制的属性文件(例如)中,并使用 ClassLoader 从 Java 代码中加载属性文件。
  • 你能举个例子吗?或者如果你能回答更好?
  • 您可以在 Gradle 论坛中通过一些示例解决方案找到类似的问题,这里:discuss.gradle.org/t/…

标签: java gradle intellij-idea build.gradle


【解决方案1】:

将此变量值存储到由processResources 复制的某些属性文件(例如)中,并使用ClassLoader 从Java 代码加载属性文件。

例如:

src/main/resources/foo.properties 中,添加以下行:

zimboom=${blabla}

在您的构建文件中,添加以下配置:

def myVar = 'hello';

processResources {
  fileMatching('foo.properties') {
    expand([blabla: myVar])
  }
}

在您的 Java 源文件中,要获取值,请使用

Properties properties = new Properties();
properties.load(MyClass.class.getResourceAsStream("/foo.properties");
String zimboom = properties.getProperty("zimboom");

【讨论】:

  • 可以不引入foo.properties直接访问.java文件中的myVar吗?
  • gradle 是一个构建工具。您可以使用它将一堆源文件转换为可运行的 jar 文件。完成后,运行 jar 文件。这与 gradle 无关了。 jar 文件应该可以在任何机器上运行,无论它是否安装了 gradle。因此,要让 gradle 构建中定义的变量在应用程序中可用,变量的值需要以某种方式存储在应用程序的 jar 文件中。使用属性文件是最简单的方法。
猜你喜欢
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2015-01-21
  • 1970-01-01
  • 2015-08-04
相关资源
最近更新 更多