package org.basex.util; import java.io.*; import java.net.*; import java.util.*; import java.util.Map.Entry; import java.util.jar.*; /** * Utility class to retrieve the manifest attributes of a JAR in the classpath. * * @author BaseX Team 2005-17, BSD License * @author Dimitar Popov */ final class JarManifest { /** The main attributes of the JAR manifest. */ private static final Attributes MAP; /** Private constructor. */ private JarManifest() { } static { Attributes m = null; final URL loc = Prop.LOCATION; if(loc != null) { final String jar = loc.getFile(); try { final ClassLoader cl = JarManifest.class.getClassLoader(); final Enumeration<URL> list = cl.getResources("META-INF/MANIFEST.MF"); while(list.hasMoreElements()) { final URL url = list.nextElement(); if(!url.getFile().contains(jar)) continue; try(InputStream in = url.openStream()) { m = new Manifest(in).getMainAttributes(); break; } } } catch(final IOException ex) { Util.errln(ex); } } MAP = m; } /** * Returns the manifest value for the specified key. * @param key key * @return value or {@code null} */ public static Object get(final String key) { if(MAP != null) { for(final Entry<Object, Object> entry : MAP.entrySet()) { if(key.equals(entry.getKey().toString())) return entry.getValue(); } } return null; } }