Java中可通过Package类获取JAR包的版本、供应商等元数据,前提是MANIFEST.MF中正确声明对应属性;使用MyClass.class.getPackage()获取Package实例,再调用getImplementationVersion()等方法读取,所有方法均可能返回null,需判空。

Java中可以通过Package类获取当前类所在JAR包的版本(Implementation-Version)、供应商(Implementation-Vendor)、规范名称(Specification-Title)等元数据信息,前提是JAR包的META-INF/MANIFEST.MF文件中正确声明了这些属性。
确保MANIFEST.MF包含所需属性
这些信息不是自动存在的,必须由构建工具(如Maven、Gradle)在打包时写入。典型的META-INF/MANIFEST.MF片段如下:
Manifest-Version: 1.0 Implementation-Title: MyLibrary Implementation-Version: 2.3.1 Implementation-Vendor: MyCompany Inc. Specification-Title: My API Spec Specification-Version: 2.3
若缺失对应字段,Package将返回null。
通过Class获取Package实例
推荐使用运行时加载的某个类来获取其所属包的元数据,例如:
- 用
getClass().getPackage()(适用于实例方法内) - 用
MyClass.class.getPackage()(更常用,无需实例) - 注意:如果类位于默认包(无package声明),
getPackage()返回null
读取版本与供应商等信息
Package提供了多个getter方法,直接调用即可:
-
getImplementationVersion()→ 返回Implementation-Version值(如"2.3.1") -
getImplementationVendor()→ 返回Implementation-Vendor值(如"MyCompany Inc.") -
getSpecificationTitle()和getSpecificationVersion()→ 对应Specification-*字段 - 所有方法均可能返回
null,使用前建议判空
实际使用示例
在工具类或启动逻辑中安全读取:
Package pkg = MyApp.class.getPackage();
if (pkg != null) {
String version = pkg.getImplementationVersion();
String vendor = pkg.getImplementationVendor();
System.out.println("Version: " + (version != null ? version : "unknown"));
System.out.println("Vendor: " + (vendor != null ? vendor : "unknown"));
}
不依赖外部配置,适合轻量级版本标识和诊断输出。

















