在 build.gradle 中使用 java 变量

Using java variable in build.gradle

有什么方法可以在我的 build.gradle 版本字段中使用 java 变量,这样我就不需要在每次创建新版本时都手动更改构建脚本了吗?

所以像这样

group = 'project_name'
version = <insert variable from java file>
sourceCompatibility = '1.8'

使用 Java 源文件来管理项目的版本是落后的。您应该让您的构建系统(在本例中为 Gradle)管理版本。当您在 Gradle 中更新版本时,您应该以新版本在整个项目中传播的方式设置构建。

在构建脚本中这很容易实现;您只需在需要的地方引用 version 属性 即可。这个概念与在您的应用程序中传递数据没有任何不同。请记住,在 Gradle 中,构建脚本是用 Groovy 或 Kotlin 编写的,并且应用正常的编程逻辑(构建脚本本质上是一个同时实现 org.gradle.api.Projectorg.gradle.api.Script 的对象).

更困难的部分是确保您的应用程序可以看到版本,而无需更新构建脚本和源代码中的版本。但是,有多种方法可以实现这一点,例如:

  1. 创建一个属性文件作为资源,并使用 processResources Gradle 任务将项目的版本注入到所述属性文件中。然后在运行时读取资源以获取应用程序版本。
  2. 创建一个自定义 Gradle 任务,该任务生成一个属性文件作为资源。然后在运行时读取资源以获取应用程序版本。
  3. 创建一个自定义 Gradle 任务,该任务生成代表您的应用程序版本的 Java 源文件(例如 AppVersion.java)。
  4. 使用 jar Gradle 任务设置清单的 Implementation-Version 属性。然后在运行时读取此属性以获取应用程序的版本。
  5. 如果使用 Java 9+ 和模块,那么您可以让 compileJava Gradle 任务设置模块版本。然后你可以在运行时读取模块版本。

您可能还想考虑将版本保留在 gradle.properties 文件中,然后从那里将其读入您的构建脚本(Gradle 为此提供了一个 API)。这样,当您更新版本时,构建脚本就不必重新编译(至少 Kotlin DSL 是这样)。