import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.net.URL; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; public class JarAuslesen { @SuppressWarnings("unused") private InputStream readStreamFromJar(String pkgname, String fname) { String res = "/" + pkgname.replace('.', '/') + "/" + fname; Class clazz = readClassFromJar(pkgname, fname); return clazz.getResourceAsStream(res); } private Class readClassFromJar(String pkgname, String fname) { Class clazz = null; ClassLoader cl = getClass().getClassLoader(); // hier wird die *.jar ermittelt URL url = cl.getResource(pkgname + "/" + fname); // Manifest ermitteln File f = new File(url.getFile()); JarFile jf; Manifest manifest = null; try { jf = new JarFile(f); manifest = jf.getManifest(); } catch (IOException e) { System.err.println("Ein-Ausgabe-Fehler bei Manifestermittlung."); } // Mainklasse ermitteln String mc = null; if (manifest != null) { Attributes att = manifest.getMainAttributes(); mc = att.getValue(Attributes.Name.MAIN_CLASS); } try { // hier muss der Packagename (mit '.') innerhalb der *.jar // ohne Dateiendung angegeben werden mc = mc.replace('/', '.'); clazz = cl.loadClass(mc); } catch (ClassNotFoundException e) { e.printStackTrace(); } return clazz; } private void loadMethods(String name) throws Exception { Class c; c = Class.forName(name); Object o = c.newInstance(); Method m[] = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.println("\nMethode: " + m[i].toString()); System.out.println("Methodenname: " + m[i].getName()); System.out.println("Return-Typ: " + m[i].getGenericReturnType()); try { Type[] pType = m[i].getGenericParameterTypes(); for (Type type : pType) { System.out.println("Parameter-Typ: " + type.toString()); if (type.equals(double.class)) m[i].invoke(o, Math.PI); if (type.equals(int.class)) m[i].invoke(o, 4711); } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } public static void main(String[] args) throws Exception { String path = "jar"; String file = "Test.jar"; JarAuslesen ja = new JarAuslesen(); System.out.println(ja.readClassFromJar(path, file)); ja.loadMethods(ja.readClassFromJar(path, file).getName()); } }