[英]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-Version
或Implementation-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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.