簡體   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