All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.io.ManifestUtil Maven / Gradle / Ivy

There is a newer version: 5.8.33
Show newest version
package cn.hutool.core.io;

import cn.hutool.core.io.resource.ResourceUtil;

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;

/**
 * Jar包中manifest.mf文件获取和解析工具类
 * 来自Jodd
 *
 * @author looly, jodd
 * @since 5.7.0
 */
public class ManifestUtil {
	private static final String[] MANIFEST_NAMES = {"Manifest.mf", "manifest.mf", "MANIFEST.MF"};

	/**
	 * 根据 class 获取 所在 jar 包文件的 Manifest
* 此方法主要利用class定位jar包,如引入hutool-all,则传入hutool中任意一个类即可获取这个jar的Manifest信息
* 如果这个类不在jar包中,返回{@code null} * * @param cls 类 * @return Manifest * @throws IORuntimeException IO异常 */ public static Manifest getManifest(Class cls) throws IORuntimeException { URL url = ResourceUtil.getResource(null, cls); URLConnection connection; try { connection = url.openConnection(); }catch (final IOException e) { throw new IORuntimeException(e); } if (connection instanceof JarURLConnection) { JarURLConnection conn = (JarURLConnection) connection; return getManifest(conn); } return null; } /** * 获取 jar 包文件或项目目录下的 Manifest * * @param classpathItem 文件路径 * @return Manifest * @throws IORuntimeException IO异常 */ public static Manifest getManifest(File classpathItem) throws IORuntimeException{ Manifest manifest = null; if (classpathItem.isFile()) { try (JarFile jarFile = new JarFile(classpathItem)){ manifest = getManifest(jarFile); } catch (final IOException e) { throw new IORuntimeException(e); } } else { final File metaDir = new File(classpathItem, "META-INF"); File manifestFile = null; if (metaDir.isDirectory()) { for (final String name : MANIFEST_NAMES) { final File mFile = new File(metaDir, name); if (mFile.isFile()) { manifestFile = mFile; break; } } } if (null != manifestFile) { try(FileInputStream fis = new FileInputStream(manifestFile)){ manifest = new Manifest(fis); } catch (final IOException e) { throw new IORuntimeException(e); } } } return manifest; } /** * 根据 {@link JarURLConnection} 获取 jar 包文件的 Manifest * * @param connection {@link JarURLConnection} * @return Manifest * @throws IORuntimeException IO异常 */ public static Manifest getManifest(JarURLConnection connection) throws IORuntimeException{ final JarFile jarFile; try { jarFile = connection.getJarFile(); } catch (IOException e) { throw new IORuntimeException(e); } return getManifest(jarFile); } /** * 根据 {@link JarURLConnection} 获取 jar 包文件的 Manifest * * @param jarFile {@link JarURLConnection} * @return Manifest * @throws IORuntimeException IO异常 */ public static Manifest getManifest(JarFile jarFile) throws IORuntimeException { try { return jarFile.getManifest(); } catch (IOException e) { throw new IORuntimeException(e); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy