-1

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

在Java中有类似的方法吗?

4

3 回答 3

4

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-VersionImplementation-Version属性在那里定义并且您仍在获取null值,那么您可能正在从不同的 JAR 加载清单文件。

作为记录:

要在 Manifest 文件中获取该属性,您需要配置构建工具来执行此操作。Maven 会自动完成(您可以自定义它),使用 Ant 您需要使用特定的Ant Task,使用 Eclipse 您需要查看其文档(与任何其他 IDE 相同)。

于 2012-09-04T09:18:32.980 回答
0

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

Class.getProtectionDomain().getCodeSource().getLocation()
于 2012-09-04T09:23:29.420 回答
0

如果它有一个 GUI 并且主要目的1是“更新”,请使用Java Web Start来部署它。

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

  1. 顺便说一句,为了得到更好的答案,把你试图“做”的事情放在一边,而是命名你试图实现的“功能”。后者可以表示为您希望为用户提供的应用程序功能。可能是“可以通过插件扩展”、“24 个月免费自动升级”、“更白、更亮、更多泡沫”等。
于 2012-09-04T09:44:55.197 回答