ほとんど標準属性がPackageクラスから直接読み取ることができます:
String version = MyApplication.class.getPackage().getSpecificationVersion();
カスタムatttributesを読み取るには、Javaのを使用しないでください。 io.Fileクラス。 URLがfile:
のURLであるとは決して考えるべきではありません。
代わりに、あなたはJarInputStream使用することができます。また
Manifest manifest;
try (JarInputStream jar = new JarInputStream(ljarLocationUrl.openStream())) {
manifest = jar.getManifest();
}
Attribute.Name name = new Attribute.Name("Revision-Number");
String revisionNumber = (String) manifest.getMainAttributes().get(name);
を、あなたは直接JarURLConnection化合物のURLを構築することでマニフェストを読むことができる:
URL manifestURL = new URL("jar:" + jarLocationUrl + "!/META-INF/MANIFEST.MF");
Manifest manifest;
try (InputStream manifestSource = manifestURL.openStream()) {
manifest = new Manifest(manifestSource);
}
Attribute.Name name = new Attribute.Name("Revision-Number");
String revisionNumber = (String) manifest.getMainAttributes().get(name);
注ProtectionDomain.getCodeSource() can return nullいます。アプリケーションでバージョン番号を指定するより良い方法は、マニフェストのSpecification-VersionまたはImplementation-Version属性に入れて、Packageメソッドから読み取ることができるようにすることです。 Implementation-Versionは自由形式の文字列で、a Specification-Version value must consist of groups of ASCII digits separated by periodsです。
もう一つの方法は、データファイルを作成するだけで、あなたはClass.getResourceまたはClass.getResourceAsStreamを使用して読み取ることができ、あなたの.jar、それを含める:
Properties props = new Properties();
try (InputStream stream = MyApplication.class.getResourceAsStream("application.properties")) {
props.load(stream);
}
String revisionNumber = props.getProperty("version");
出典
2017-05-26 14:08:12
VGR
https://docs.oracle.com/javase/8 /docs/api/java/util/jar/JarFile.html#JarFile-java.io.File-、https://docs.oracle.com/javase/8/docs/api/java/util/jar/JarFile。 html#getManifest-- –