【问题标题】:Using java variable in build.gradle在 build.gradle 中使用 java 变量
【发布时间】:2020-08-20 22:10:05
【问题描述】:

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

像这样的

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

【问题讨论】:

  • 这个变量的值是怎么变化的?换句话说,如何增加版本?
  • @AbhijitSarkar 我想在我的项目中定义的 java 变量中增加项目构建版本
  • 这毫无意义。您可以在buildSrc 中定义变量,但您的构建不会修改它。此外,构建可以在您的 PC、CI 服务器、另一个家伙的 Mac 上运行,所有这些版本如何保持同步?
  • @AbhijitSarkar 这怎么没有意义?为什么我不能在构建脚本中使用 java 版本?不可能做这样的事情吗?在 java 类中:String myVersion: "1.0" 在 build.gradle 中:version = myVersion
  • 我已经说过了,你可以在buildSrc中定义变量。没有意义的是你想要一个你不知道如何递增的变量。

标签: java gradle build.gradle


【解决方案1】:

使用 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 就是这种情况)。

【讨论】:

  • 谢谢。我一定会调查的
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多