繁体   English   中英

检测当前的应用版本

[英]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-VersionImplementation-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

  1. 顺便说一句,要获得更好的答案,请搁置您要“做什么”,而要命名您要实现的“功能”。 后者可以表示为您想要为用户提供的应用程序功能。 它可能类似于“可以使用插件扩展”,“可以免费升级24个月”,“更白,更明亮,更泡沫”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM