问题描述
是否可以在我的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.Project
和org.gradle.api.Script
的对象)。
更困难的部分是确保您的应用程序可以看到版本,而不必在构建脚本和源代码中都更新版本。但是,有多种方法可以完成此操作,例如:
- 创建一个属性文件作为资源,并使用
processResources
Gradle任务将项目的版本注入到该属性文件中。然后在运行时阅读资源以获取应用程序版本。 - 创建一个定制的Gradle任务,该任务会生成一个属性文件作为资源。然后在运行时阅读资源以获取应用程序版本。
- 创建一个自定义的Gradle任务,该任务会生成代表应用程序版本的Java源文件(例如
AppVersion.java
)。 - 使用
jar
Gradle任务设置清单的Implementation-Version
属性。然后在运行时读取此属性以获取应用程序的版本。 - 如果使用Java 9+和模块,则可以让
compileJava
Gradle任务设置模块版本。然后,您可以在运行时读取模块版本。
您可能还需要考虑将版本保留在gradle.properties
文件中,然后从那里将其读取到构建脚本中(Gradle为此提供了API)。这样,当您更新版本时,无需重新编译构建脚本(至少Kotlin DSL就是这种情况)。