当我使用 XCode 和 iOS 时,有一种简单的方法可以通过阅读 plist 来检查应用程序的当前版本。
在Java中有类似的方法吗?
XCode 将该版本值存储在与您的应用程序一起分发的资源文件中。在 Java 中,等价物是您的清单文件,它被打包在您的 JAR/WAR/EAR 档案中。
清单文件只是一个名为的元数据文本文件MANIFEST.MF
,它存储一些标准的键/值对,这些键/值对可以被许多工具识别,并且打包META-INF
在你的 java 存档中一个名为的特殊文件夹中。
要为您自己的 JAR 获取清单文件,这个问题会给您一些线索。拥有自己的Manifest
实例后,请使用以下任一选项来获取该版本值。
通过这种方式获取规范版本:
Manifest mf = .... // get the manifest file
String specVersion = mf.getAttribute("Specification-Version");
通过这种方式获取实现版本:
Manifest mf = .... // get the manifest file
String specVersion = mf.getAttribute("Implementation-Version");
可以在此处找到有关 JAR 清单的更多信息。
编辑:
如果您正在获取null
任何这些属性的值,这意味着它们尚未在您的MANIGEST.MF
文件中进行配置。这很容易检查:解压缩您的 JAR 文件(JAR 文件只是具有不同扩展名的 ZIP 文件)并转到META-INF
文件夹中找到该MANIFEST.MF
文件,因为它是一个文本文件,您可以将其内容打印到控制台,如果有Specification-Version
或Implementation-Version
属性在那里定义并且您仍在获取null
值,那么您可能正在从不同的 JAR 加载清单文件。
作为记录:
要在 Manifest 文件中获取该属性,您需要配置构建工具来执行此操作。Maven 会自动完成(您可以自定义它),使用 Ant 您需要使用特定的Ant Task,使用 Eclipse 您需要查看其文档(与任何其他 IDE 相同)。
正如 Alonso 所说,在 Java 中,编译器不会自动为您的代码分配构建版本。Java 将其留给运行编译器的构建工具,例如 ant 或 maven。如果您的应用程序没有使用清单文件(通常是这种情况),而是使用版本号后缀,例如 my_app_1.2.3.jar,那么您可以这样做来获取 jar 名称:
Class.getProtectionDomain().getCodeSource().getLocation()
如果它有一个 GUI 并且主要目的1是“更新”,请使用Java Web Start来部署它。
为了向用户显示版本,我会将版本号存储在应用程序的每个 Jar 的清单中,并在运行时Implementation-Version
在 a 中显示 s 。JTable