检测当前的应用版本

时间:2012-09-04 09:05:12

标签: java version versioning

当我使用XCode和iOS时,有一种简单的方法可以通过阅读plist来检查应用程序的当前版本。

在Java中有类似的方法吗?

3 个答案:

答案 0 :(得分:4)

XCode将该版本值存储在随应用程序一起分发的资源文件中。在Java中,等效的是您的Manifest文件,它存放在JAR / WAR / EAR存档中。

Manifest文件只是一个名为MANIFEST.MF的元数据文本文件,它存储一些标准的键/值对,这些键/值对被许多工具识别并打包在java存档中名为META-INF的特殊文件夹中

获取自己的JAR this question的清单文件会给你一些线索。拥有自己的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清单的更多信息可以在here找到。

修改

如果您为这些属性获取null值,则表示尚未在MANIGEST.MF文件中配置这些值。这很容易检查:解压缩您的JAR文件(JAR文件只是具有不同扩展名的ZIP文件)并转到META-INF文件夹以查找MANIFEST.MF文件,因为它是一个文本文件,您可以打印它内容到控制台,如果在那里定义了Specification-VersionImplementation-Version属性并且您仍然获得null值,那么您可能正在从其他JAR加载清单文件。

记录:

要在清单文件中获取该属性,您需要配置构建工具来执行此操作。 Maven会自动执行它(你可以customize it),使用Ant你将需要使用特定的Ant Task,使用Eclipse需要通过its docs(与任何其他IDE相同)

答案 1 :(得分:0)

正如Alonso所说,在Java中,编译器不会自动为您的代码分配构建版本。 Java将其留给运行编译器的构建工具,例如蚂蚁或maven。如果您的应用程序没有使用清单文件(通常是这种情况),而是使用版本号后缀,例如my_app_1.2.3.jar然后你可以这样做以获取jar名称:

Class.getProtectionDomain().getCodeSource().getLocation()

答案 2 :(得分:0)

如果它有GUI并且主要目的 1 是'update',请使用Java Web Start进行部署。

为了向用户显示版本,我会将版本号存储在应用的每个Jar的清单中,并在运行时在Implementation-Version中显示JTable

  1. 顺便说一下,为了得到更好的答案,把你想要做的事情放在一边,而不是命名你想要达到的'特征'。后者可以表示为您希望为用户提供的应用程序功能。它可能类似于“可以通过插件扩展”,“24个月免费自动升级”,“更白,更亮,更肥皂”......