在build.gradle中使用Java变量

问题描述

是否可以在我的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就是这种情况)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...