当我使用XCode和iOS时,有一种简单的方法可以通过阅读plist来检查应用程序的当前版本。
在Java中有类似的方法吗?
答案 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-Version
或Implementation-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
。