私が XCode と iOS で作業していたとき、plist を読み取ってアプリケーションの現在のバージョンを確認する簡単な方法がありました。
Javaでこれを行う同様の方法はありますか?
私が XCode と iOS で作業していたとき、plist を読み取ってアプリケーションの現在のバージョンを確認する簡単な方法がありました。
Javaでこれを行う同様の方法はありますか?
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-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 のマニフェストにバージョン番号を保存し、実行時にImplementation-Version
sを表示します。JTable