From 47efb49495a5aec700a14684e62251673a1deb3a Mon Sep 17 00:00:00 2001 From: bwcx_jzy Date: Wed, 14 Jul 2021 22:57:21 +0800 Subject: [PATCH] =?UTF-8?q?ManifestUtil=20=E6=96=B0=E5=A2=9E=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/io/ManifestUtil.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/ManifestUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/ManifestUtil.java index 818d85d9e..d97b0abc9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/ManifestUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/ManifestUtil.java @@ -1,8 +1,13 @@ package cn.hutool.core.io; +import cn.hutool.core.util.ClassUtil; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.net.JarURLConnection; +import java.net.URL; +import java.net.URLConnection; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -16,6 +21,34 @@ import java.util.jar.Manifest; public class ManifestUtil { private static final String[] MANIFEST_NAMES = {"Manifest.mf", "manifest.mf", "MANIFEST.MF"}; + /** + * 根据 class 获取 jar 包文件的 Manifest + * + * @param cls 类 + * @return Manifest + */ + public static Manifest getManifest(Class cls) throws IOException { + URL url = ClassUtil.getResourceUrl("", cls); + JarFile jarFile = null; + try { + URLConnection connection = url.openConnection(); + if (connection instanceof JarURLConnection) { + JarURLConnection urlConnection = (JarURLConnection) connection; + jarFile = urlConnection.getJarFile(); + return jarFile.getManifest(); + } + } finally { + IoUtil.close(jarFile); + } + return null; + } + + /** + * 获取 jar 包文件的 Manifest + * + * @param classpathItem 文件路径 + * @return Manifest + */ public static Manifest getManifest(File classpathItem) { Manifest manifest = null; @@ -46,8 +79,7 @@ public class ManifestUtil { fis = new FileInputStream(manifestFile); manifest = new Manifest(fis); } catch (final IOException ignore) { - } - finally { + } finally { IoUtil.close(fis); } }