1 19 package org.lucane.jarlauncher; 20 21 import java.io.File ; 22 import java.io.FilenameFilter ; 23 import java.lang.reflect.InvocationTargetException ; 24 import java.lang.reflect.Method ; 25 import java.net.MalformedURLException ; 26 import java.net.URL ; 27 import java.net.URLClassLoader ; 28 29 public class JarLauncher 30 { 31 public static void main(String [] args) 32 throws Throwable 33 { 34 if(args.length < 2) 36 { 37 System.err.println("usage: JarLauncher <lib-path> <main-class> [params]"); 38 System.exit(1); 39 } 40 41 String path = args[0]; 43 String mainClass = args[1]; 44 String [] newArgs = new String [args.length-2]; 45 for(int i=0;i<newArgs.length;i++) 46 newArgs[i] = args[i+2]; 47 48 File lib = new File (path); 50 File [] jars = lib.listFiles(new FilenameFilter () { 51 public boolean accept(File dir, String name) { 52 return name.toLowerCase().endsWith(".jar"); 53 } 54 }); 55 56 URL [] urls = new URL [jars.length]; 58 for(int i=0;i<jars.length;i++) 59 { 60 try { 61 String fullPath = "jar:file:///" + jars[i].getAbsolutePath().replace('\\', '/') + "!/"; 62 urls[i] = new URL (fullPath); 63 } catch (MalformedURLException e) { 64 System.err.println("Unable to load jar : " + jars[i].getName()); 65 } 66 } 67 68 ClassLoader loader = new URLClassLoader (urls); 70 71 try { 72 Class c = Class.forName(mainClass, true, loader); 74 Method m = c.getDeclaredMethod("main", new Class []{String [].class}); 75 m.invoke(null, new Object []{newArgs}); 76 } catch (ClassNotFoundException e) { 77 System.err.println("Unable to find class : " + mainClass); 78 } catch (SecurityException e) { 79 System.err.println("Unable to load main method in : " + mainClass); 80 } catch (NoSuchMethodException e) { 81 System.err.println("No main method in : " + mainClass); 82 } catch (IllegalArgumentException e) { 83 System.err.println("Wrong main method in : " + mainClass); 84 } catch (IllegalAccessException e) { 85 System.err.println("Wrong main method in : " + mainClass); 86 } catch (InvocationTargetException e) { 87 throw e.getCause(); 88 } 89 } 90 } 91 92 | Popular Tags |