我可以从代码访问 java 清单中定义的值吗?
可以通过编程方式访问 MANIFEST.MF 中的许多值,而无需查找和/或打开 jar 文件本身。
java.lang.Package
提供对 ImplementationTitle
、ImplementationVendor
、ImplementationVersion
、SpecificationTitle
、SpecificationVendor
和 SpecificationVersion
》的访问
。
CodeSource
类找到,可以通过 Class
.getProtectionDomain()
.getCodeSource()
检索该类
这是一个简单的示例,从 JAR 的清单原位读取主要属性。它可以很方便地检查实际存在的内容。概括地说,
var jar = new JarFile(name);
var manifest = jar.getManifest();
var map = manifest.getMainAttributes();
map.entrySet().forEach(e -> {
System.out.println(e.getKey()
+ ": " + e.getValue());
});
使用以下方式检测External Jar/SDK MANIFEST.MF信息。我们可以使用此信息来检测 Jar 版本等。使用 http://docs.oracle.com/javase/6/docs/api/java/util/jar/Manifest.html
public void getSDKInfo() {
Package pkg = Manifest.class.getPackage();
String specTitle = pkg.getSpecificationTitle();
String vendor = pkg.getSpecificationVendor();
String version = pkg.getSpecificationVersion();
}
尝试使用 jcabi-manifests
中的
com.jcabi.manifests.Manifests
实用程序类。使用此类,您可以通过一行读取所有可用的 MANIFEST.MF 文件:
String name = Manifests.read("Foo-Name");
另外,请参阅这篇文章:http://www.yegor256.com/2014/07/03/how-to-read-manifest-mf.html