【发布时间】:2014-01-19 03:20:42
【问题描述】:
出于支持目的,我需要向我们的 Java 库添加版本和构建标识符。该库本身是一个无需用户交互的工具包,可用于不同的环境(独立的 Java 应用程序、Web 应用程序、Eclipse 应用程序、Maven 依赖项......)。
我想要的是一个带有一些常量的类,它为我提供上述信息(例如MyAppVersion.BUILD,...),以便可以显示它们,例如在对话框,命令行输出等。经过我的研究,似乎有以下几种做法:
- 为文件名添加版本控制,如
myLibrary-0.1.2.jar;在我们的情况下不可行,因为部署时我无法控制文件名 - 向
MANIFEST.MF添加信息并以编程方式读取它,如here 所述。但是,我不确定这种方法对于不同的类加载器(Eclipse、OSGi、应用程序服务器等)有多健壮,如果 JAR 文件被重新打包,这些信息就会丢失 - 使用保存版本的
version.properties文件,如here 所述,并在构建期间使用脚本更新version.properties文件 - 将版本信息直接硬编码到类中,并使用脚本更新此信息
还有其他方法吗?最后一个选项对我来说似乎最“强大”,对这个变体有任何反对意见吗?是否有 Maven 插件支持在构建期间更新 MyAppVersion.java 文件中的这些信息?
【问题讨论】:
-
This answer 提供了一种更简洁的方式来从清单中获取版本。简而言之:
String version = this.getClass().getPackage().getImplementationVersion(); -
使用属性文件并用 maven 过滤它,要求它插入版本号。