[英]Detect current app version
当我使用XCode和iOS时,有一种简单的方法可以通过读取plist来检查应用程序的当前版本。
在Java中有类似的方法吗?
XCode将该版本值存储在与应用程序一起分发的资源文件中。 在Java中,等效文件将是清单文件,该文件打包在JAR / WAR / EAR归档文件中。
清单文件只是一个名为MANIFEST.MF
的元数据文本文件,该文件存储一些标准键/值对,这些对键/值对可被许多工具识别,并打包在Java归档文件中名为META-INF
的特殊文件夹中。
要获取自己的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
文件中MANIGEST.MF
进行配置。 这很容易检查:解压缩您的JAR文件(JAR文件只是具有不同扩展名的ZIP文件),然后转到META-INF
文件夹中查找MANIFEST.MF
文件,因为它是文本文件,所以您可以将其内容打印到控制台,如果在那里定义了Specification-Version
或Implementation-Version
属性,而您仍然获得null
值,则可能是从其他JAR加载清单文件。
作为记录:
要在清单文件中获取该属性,您需要配置构建工具来这样做。 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的清单中,并在运行时在JTable
中显示Implementation-Version
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.